C#:如何使用带有"out"变量的泛型方法

Tin*_* Vo 8 c# generics out-parameters generic-method

我想创建一个简单的泛型函数

void Assign<T>(out T result) 
{
  Type type = typeof(T);
  if (type.Name == "String")
  {
     // result = "hello";
  }
  else if (type.Name == "Int32")
  {
     // result = 100;
  } 
  else result = default(T);
}
Run Code Online (Sandbox Code Playgroud)

用法:

int value;
string text;

Assign(value); // <<< should set value to 100
Assign(text); // <<< should set text to "hello"
Run Code Online (Sandbox Code Playgroud)

我的问题是如何编写代码来设置这些值,即.评论部分中缺少的代码.

谢谢你的帮助.

Rex*_*x M 16

看起来在这种情况下你可能正在努力避免拳击?没有更多信息很难说,但是对于这个具体的例子,它只是使用方法重载更容易,并且可能更不容易出错:

void Assign(out string value)
{
   //...
}

void Assign(out int value)
{
   //...
}
Run Code Online (Sandbox Code Playgroud)

对于具体学什么的目的,错在这里,你确实需要它铸造的一般类型之前将值转换为一个对象:

(T)(object)"hello world!";
Run Code Online (Sandbox Code Playgroud)

哪个IMO非常讨厌,应该是最后的手段 - 当然不会让你的代码更清洁.

无论何时对通用参数进行类型检查,都可以很好地指出泛型不是解决问题的正确方法.进行通用参数类型检查会使代码更复杂,而不是更简单.它使一种方法负责基于类型的不同行为,而不是一系列易于更改而不会意外影响其他方法的单一方法.请参阅单一责任原则.