0

我是 c# 的新手,请纠正我的错误
我正在尝试创建一个具有 Nullable 属性的类,但它在构建我的类看起来像的类时出错

public class vwAcdAdmissionWithvwAcdAdmissionSessionDetailWithAllMaster1
    {
        public Nullable<string> Name { get; set; }
        public Nullable<string> StudentNameWithLedgerName { get; set; }
        public Nullable<decimal> AASDid { get; set; }
        public Nullable<decimal> StudentLedgerId { get; set; }
        public Nullable<string> LedgerName { get; set; }
        public Nullable<decimal> SessionId { get; set; }
        public Nullable<string> ScholarNo { get; set; }
        public Nullable<decimal> ClassId { get; set; }
        public Nullable<decimal> SectionId { get; set; }
        public Nullable<decimal> MediumId { get; set; }
        public Nullable<decimal> StreamId { get; set; }
        public Nullable<decimal> HouseId { get; set; }
        public Nullable<decimal> FeeCategoryId { get; set; }
        public Nullable<decimal> SchemeId { get; set; }
        public Nullable<decimal> RollNo { get; set; }
        public Nullable<decimal> SchoolId { get; set; }
        public Nullable<decimal> UserId { get; set; }
        public Nullable<decimal> ShiftId { get; set; }
        public Nullable<string> StreamName { get; set; }
        public Nullable<string> ClassName { get; set; }
        public Nullable<string> HouseName { get; set; }
        public Nullable<string> SectionName { get; set; }
        public Nullable<string> ShiftName { get; set; }
        public Nullable<string> MediumName { get; set; }
        public Nullable<string> FeeCategoryName { get; set; }
        public Nullable<string> DiscountType { get; set; }
        public Nullable<decimal> Discount { get; set; }
}

错误是错误是 我不明白它的含义以及我现在可以做什么 请建议我并感谢您的宝贵反馈
The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'


我想让我的字符串可以为空的原因类似于我之前的帖子 上一篇
它在返回不可为空的字符串时给出错误

4

5 回答 5

6

string已经是一个可为的类型,因为它是一个类。您Nullable<T>只能与structs 一起使用。

查看源代码Nullable<T>

public struct Nullable<T> where T : struct

string绝对不满足这里的通用约束。

于 2013-11-14T06:00:45.203 回答
3

消息说明了它的含义:只有结构(值类型)可以在Nullable<T>.

因为string(or System.String) 是引用类型- 并且肯定不是导致编译器错误的结构!- 那么这种(引用)类型的表达式本身就允许null作为一个值,并且不需要用Nullable.

要“修复”这个问题,只需将所有更改Nullable<string> xstring x.

于 2013-11-14T06:00:45.363 回答
2

这里已经有很多正确的答案了,但是由于 OP 似乎仍然有点困惑,我想让这一点尽可能简单明了:

您应该使用Nullable<something>a something,它本身的值不能为Null。举DateTime个例子 - 它有一个默认值DateTime.MinValue(一个代表 01.01.01 的常量),但永远不能有一个Null. 也一样int;它永远不能保持价值null

即,你不能这样做:

DateTime invalidDate = null;

但你可以这样做:

Nullable<DateTime> validDate = null;

另一方面,字符串可以是 null,所以你基本上不需要Nullable:

string justFine = null;

因此,尝试使用Nullable<string>没有什么意义,而这基本上就是解决此问题所需要知道的。

于 2013-11-14T07:12:59.230 回答
2

string 是一个引用类型,在 Nullable T 中使用的 for 必须是一个值类型。 http://msdn.microsoft.com/en-us/library/362314fe(v=vs.90).aspx
http://msdn.microsoft.com/en-us/library/vstudio/1t3y8s4s.aspx

无论如何,您可以这样做string s = null,因此无需Nullable<string>

于 2013-11-14T06:00:58.090 回答
0

decimal是一个值类型。string是一个类。Null 不能分配给 ValueTypes 的变量,除非您将它们包装在Nullable<>. Null 已经可以分配给像string.

于 2013-11-14T06:01:41.597 回答