pae*_*bal 6 c# generics c#-4.0
我有以下C#类:
public class MyType<T>
{
public void TryParse(string p_value)
{
T value ;
Parser.TryParse(p_value, out value);
// Do something with value
}
}
Run Code Online (Sandbox Code Playgroud)
重点是调用正确的Parser.TryParse方法,具体取决于泛型类型T.
这使用以下静态类:
static public class Parser
{
static public void TryParse(string p_intput, out object p_output)
{
// Do something and return the right value
}
static public void TryParse(string p_intput, out double p_output)
{
// Do something and return the right value
}
static public void TryParse(string p_intput, out int p_output)
{
// Do something and return the right value
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以工作:在最坏的情况下,将调用"对象"TryParse.相反,我有两个编译错误:
问题1:我不明白为什么这不起作用:我可以天真,但不是所有C#对象都应该从"对象"派生出来?为什么T不能转换为对象?
问题2: 如何将具有泛型类型T的方法分配到正确的非泛型方法中(即根据正确的T类型MyType<T>.TryParse
调用权限Parser.TryParse
)?
编辑问题以反映原始问题意图(如标题所示:如何将C#泛型方法调用分配到专门的方法调用中)
其实,ref
和out
参数不允许类型变化.因此,要将变量传递给期望out object
参数的方法,必须将该变量声明为object
.
根据规范(§10.6.1.2和§10.6.1.3)
当形式参数是引用参数时,方法调用中的相应参数必须由关键字
ref
后跟一个与形式参数相同类型的变量引用(第5.3.3节)组成.当形式参数是输出参数时,方法调用中的相应参数必须由关键字
out
后跟一个与形式参数相同类型的变量引用(第5.3.3节)组成.
请参阅:为什么ref
和out
参数不允许类型变化?了解原因.
额外问题:如何将具有泛型类型的方法分配
T
到正确的非泛型方法中(即根据正确的类型MyType<T>.TryParse
调用权限)?Parser.TryParse
T
我要把它转回来.你为什么做这个?如果你正在调用MyType<T>.TryParse
,比方说MyType<int>.TryParse
,为什么不Int32.TryParse
直接打电话?什么是这个额外的层购买你?
归档时间: |
|
查看次数: |
2716 次 |
最近记录: |