Почему я получаю ошибку обнуления при использовании этого статического расширения? [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Почему я получаю ошибку обнуления при использовании этого статического расширения? [дубликат]

Сообщение Anonymous »

Я не понимаю, почему следующий код выдает предупреждение во время компиляции:
Изображение

Можете ли вы объяснить, почему это происходит? Я этого не понимаю.
Min1 — это обычный статический метод с той же сигнатурой, что и Min2. Но вызов Min1 - это нормально, а вызов Min2 - нет.
Смена подписи Min2 тоже не помогла. Каждое из следующих действий создает одно и то же предупреждение:
public static DateOnly? Min2(params DateOnly?[]? values)
public static DateOnly? Min2(params DateOnly[]? values)
public static DateOnly? Min2(params DateOnly?[] values)

Полный код на случай, если вы захотите попробовать его самостоятельно (я использовал .NET 10.0):
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Linq;

namespace MyTests;

[TestClass]
public class DateOnlyExtensionsTest
{
[TestMethod]
public void TestMin()
{
DateOnly d1 = new DateOnly(2025, 10, 1);
DateOnly d2 = new DateOnly(2025, 10, 2);
var min1 = Min1(d1, d2);
var min2 = DateOnly.Min2(d1, d2);
var min3 = DateOnly.Min3(d1, d2);
var min4 = DateOnly.Min4(d1, d2);
var min5 = DateOnly.Min5(d1, d2);
Assert.AreEqual(min1, d1);
Assert.AreEqual(min2, d1);
Assert.AreEqual(min3, d1);
Assert.AreEqual(min4, d1);
Assert.AreEqual(min5, d1);
}

public DateOnly Min1(params DateOnly[] values)
{
return values.Min();
}
}

public static class DateOnlyExtensions
{
extension(DateOnly)
{
public static DateOnly Min2(params DateOnly[] values)
{
return values.Min();
}

public static DateOnly? Min3(params DateOnly?[]? values)
{
return values?.Min();
}

public static DateOnly? Min4(params DateOnly[]? values)
{
return values?.Min();
}

public static DateOnly? Min5(params DateOnly?[] values)
{
return values.Min();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -extension
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»