zequion Ответов: 2

Стандартная функция с параметром without <T>


------------------------------
Вопрос 1:
Я работаю с функциями системной библиотеки, которые должны быть стандартными для случаев, когда у меня есть общие параметры типа "T", и для случаев, когда у меня нет "T", но есть переменная.

Я обнаружил, что для каждой функции, которую я выполняю, я должен выполнить две инициализирующие функции, которые в конечном итоге передают систему.Введите параметр для конечной функции, которая стандартизирует.

Чтобы не нужно было этого делать, мне нужно было бы что-то вроде того, что появляется в "MyFunction_Alternative". но:
- Это неверно: система.Тип Source_Type = (T! = Null)? Т: MyVariable.метод GetType ();
- Это недопустимо: <t?>.

Я хотел бы видеть <T> Обнуляемым, потому что это решило бы проблему.
------------------------------

// Function to Employ when I have a Variable but I don't have <T>.
public static void Function_NoT_Ini(dynamic MyVariable)
{  System.Type Origen_Type = MyVariable.GetType();
   MyFunction_(Origen_Type);
}

// Function to Employ when I have <T>.
public static void Function_T_Ini<T>()
{  System.Type Origen_Type = typeof(T);
   MyFunction_(Origen_Type);
}

// Standard Final Function.
private static void MyFunction_(System.Type Origen_Type)
{   System.Console.WriteLine("The values of the Enum are:");
    foreach (int MyEnum_Value in System.Enum.GetValues(Origen_Type))
    {   System.Console.WriteLine(MyEnum_Value);
    }
}
// Alternative Final Function. It's not valid.  It is also not valid <T?>.
private static void MyFunction_Alternative<T>(dynamic MyVariable)
{   System.Type Origen_Type = (T != null) ? T : MyVariable.GetType();

    System.Console.WriteLine("The values of the Enum are:");
    foreach (int MyEnum_Value in System.Enum.GetValues(Origen_Type))
    {   System.Console.WriteLine(MyEnum_Value);
    }
}



------------------------------
Вопрос 2:
У меня есть проблема функций, в которых мне нужно делать приведение, когда у меня нет <T>.
Это правильная система?
------------------------------
public static void MyFunction_Cast<T>(dynamic MyVariable)
{   dynamic MyValue = 10;

    // Cast with <T>.
    T MyCast_Variable = (T)MyValue;

    // Cast without <T>.
    System.Type Origen_Type = MyVariable.GetType();

    // It is not valid.
    dynamic My_Second_Variable_of_MyVariable_Type = (Origen_Type)MyValue;

    // It is valid, but is it the right system?
    dynamic My_Second_Variable_of_MyVariable_Type = System.Activator.CreateInstance(Origen_Type);

    // For example, if the type is an enumeration, it would convert the value 10 to Enumeration.MyValue10 (Not sure)
    My_Second_Variable_of_MyVariable_Type_ = MyValue;
}


Что я уже пробовал:

на всех сайтах компании internet.in все сайты Интернета.

2 Ответов

Рейтинг:
2

zequion

It is a translator error. It is actually <T>.


Рейтинг:
1

OriginalGriff

C# - это строго типизированный язык, и он требует определения всех переменных, прежде чем вы сможете их использовать. Он также чувствителен к регистру, так что t это не то же самое, что T:

private static void MyFunction_Alternative<t>(dynamic MyVariable)
{   System.Type Origen_Type = (T != null) ? T : MyVariable.GetType();