【问题标题】:c# how to use a template in a get property?c#如何在get属性中使用模板?
【发布时间】:2019-11-07 11:03:28
【问题描述】:
我在 c# 的 get 属性中使用模板时遇到了一些问题。下面的类没有问题:
public class test
{
public T GetDefault<T>()
{
return default(T);
}
}
但是我想使用get属性然后出现错误
意外使用通用名称
代码如下:
public class test
{
public T Default<T> => default<T>;
}
【问题讨论】:
标签:
c#
templates
properties
get
【解决方案1】:
到目前为止,C# 中还没有泛型属性。你可以找到详情here和here:
我们必须为通用属性的后备存储预留空间
[...]。但我们不知道要预留多少。
即使编译器已经阅读并理解了
通用的。
MSDN 声明here:
属性是字段的自然扩展。两者都被命名为成员
与关联类型。
它们必须在编译时具有关联的类型。
【解决方案2】:
我认为当前的 C# 版本不支持这种语法糖。但是你可以得到类似这样的行为:
public static class test<T>
{
public static T Default => default(T);
}
然后使用它:
var value = test<int>.Default;
实际上,如果您在两者之间挣扎,我建议您留在方法:
public static class test
{
public static T GetDefault<T>() => default(T);
}
好处是您可以将不同的扩展放在同一个测试类中,放在不同的类型上。