Я пытаюсь написать метод, который принимает общий ввод и возвращает значение null, если вход по умолчанию и XElement в противном случае.Параметр 'T' имеет то же имя, что и параметр типа
Btw, я довольно зеленый при общих методах и, по-видимому, в google-fu.
Вот что я до сих пор:
public static class ConversionClass<T>
{
public static XElement newXElementOrNull<T>(string name, T val)
{
if ((T.type == "String") && (val == String.Empty))
{
return null;
}
if (val == default(T))
{
return null;
}
else
{
return new XElement(name, val);
}
}
}
По какой-то причине, C# не нравится.
Он уклоняется от подписи методы (newXElementOrNull), говоря:
Типа параметр «T» имеет то же имя в качестве параметра типа от внешнего вида «AddXMLTest.Converter»
И это выдвигает на первый план в T угловые скобки и T в параметре.
Чтобы усугубить ситуацию, ему не нравится элемент val == default (T), поскольку он говорит, что оператор '==' не может быть применен к операндам типа T и T.
Что я делаю неправильно?
Вам не хватает кода из этого примера, чтобы выяснить, что здесь действительно не так. Например, 'val == default (T)' недействительно, как вы написали пример. Кроме того, очевидно, что у вас есть «внешний тип», который также использует «T» в параметре типа, но вы не указали этот примерный код. –
FYI соглашение об именах для всех не-частных методов (edit: not camelCase) PascalCase –
Кроме того, if ((T.type == "String") && (val == String.Empty)) недопустим. Пожалуйста, предоставьте короткий, но полный пример, который воспроизводит проблему. –