C#泛型:成员的默认非空值

SigTerm

在这个通用的“类”中:

public class Param<ValueType>{
    public ValueType value;
}

什么时候ValueTypestring我希望value所有新创建的类实例都不为空,而无需通过构造函数显式传递默认值。在我的情况ValueType只能是intfloatboolstringstruct(这并不需要执行)。

我怎样才能做到这一点?

当我尝试这样做时:

public class Param<ValueType> where ValueType: new(){
    public ValueType value = new ValueType();
}

类停止接受字符串。

移除new()约束后,我将无法再使用new ValueType()(显然),并且value对于的所有新实例均为null Param<string>

我该怎么办?

我之所以希望这种情况发生,是因为我.Equals()定义了which value.Equals(other.value),当valuenull为null时会引发异常

Xanatos

你可以:

public class Param<ValueType>
{
    public ValueType value = typeof(ValueType) == typeof(string) ? (ValueType)(object)string.Empty : default(ValueType);
}

请注意,default(int) == 0依此类推。

嗯,为了进行比较,您应该:

bool areEqual = EqualityComparer<ValueType>.Equals(value, other.Value);

它适用于null值。

即使使用泛型,也要注意:

if (value == null)
{

}

是完全有效的代码。显然,只有当ValueType存在null和存在时nullValueType == int它才会成立(因此永远不会发生)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中访问内部泛型的成员

来自分类Dev

C#泛型-推断静态工厂成员的类型

来自分类Dev

在C#中访问非泛型类型

来自分类Dev

C#泛型并使用类型化方法中的非泛型版本

来自分类Dev

从C#泛型类型继承到非泛型类型时,如何降低冗长性?

来自分类Dev

为什么泛型结构不能具有在C#中指定泛型类型的静态成员?

来自分类Dev

C#:从泛型转换为值类型

来自分类Dev

设置Kotlin泛型的默认值

来自分类Dev

在C#中将默认值设置为成员类

来自分类Dev

C#泛型:通配符

来自分类Dev

C#泛型列表

来自分类Dev

C#:递归泛型

来自分类Dev

通过动态访问泛型类型的成员时出现StackOverflowException:.NET / C#框架错误?

来自分类Dev

C#泛型:修改派生类中隐藏的继承成员

来自分类Dev

C#泛型:修改派生类中隐藏的继承成员

来自分类Dev

C# 泛型类/类型列表作为类的属性或成员

来自分类Dev

C ++:泛型类中的非泛型方法?

来自分类Dev

如何强制.NET(C#)使用方法的非泛型重载?

来自分类Dev

C#泛型错误-类型字符串必须不可为空

来自分类Dev

如何在C#中将对象转换为可为空的泛型?

来自分类Dev

django:非空字段的默认值

来自分类Dev

Aeson:具有默认值的泛型

来自分类Dev

当泛型具有默认值时,使用泛型制作struct的实例

来自分类Dev

在其成员函数之一中进一步约束泛型类c#

来自分类Dev

C#集合类型约束泛型

来自分类Dev

C#泛型,接口和继承

来自分类Dev

我在滥用C#泛型吗?

来自分类Dev

C#中的嵌套泛型问题

来自分类Dev

声明C#泛型类型方法