gpt4 book ai didi

c# - 运算符和泛型类

转载 作者:IT王子 更新时间:2023-10-29 04:13:38 26 4
gpt4 key购买 nike

我想做一个方法:

object Execute()
{
return type.InvokeMember(..);
}

接受通用参数:

T Execute<T>()
{
return Execute() as T;

/* doesn't work:
The type parameter 'T' cannot be used with the 'as' operator because
it does not have a class type constraint nor a 'class' constraint */

// also neither typeof(T), nor T.GetType() are possible

return (T) Execute(); // ok
}

但我认为运算符 as 将非常有用:如果结果类型不是 T 方法将返回 null,而不是异常!可以吗?

最佳答案

你需要添加

where T : class

到您的方法声明,例如

T Execute<T>()  where T : class
{

顺便提一下,通用包装器并没有真正增加多少值(value)。调用者可以写:

MyClass c = whatever.Execute() as MyClass;

或者如果他们想抛出失败:

MyClass c = (MyClass)whatever.Execute();

通用包装器方法如下所示:

MyClass c = whatever.Execute<MyClass>();

所有三个版本都必须指定完全相同的三个实体,只是顺序不同,所以没有一个更简单或更方便,但是通用版本隐藏了正在发生的事情,而“原始”版本每个都清楚是否会有一个 throw 或一个 null

(如果您的示例是从您的实际代码中简化而来的,这可能与您无关)。

关于c# - 运算符和泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com