2012-02-10 31 views
132

Tại sao tôi gặp lỗi "Loại 'chuỗi' phải là không kiểu giá trị -nullable để sử dụng nó như tham số 'T' trong kiểu generic hoặc phương thức 'System.Nullable' "?Loại 'chuỗi' phải là loại không có giá trị để sử dụng nó làm tham số T trong loại hoặc phương thức chung 'System.Nullable <T>'

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using Universe; 

namespace Universe 
{ 
    public class clsdictionary 
    { 
     private string? m_Word = ""; 
     private string? m_Meaning = ""; 

     string? Word { 
      get { return m_Word; } 
      set { m_Word = value; } 
     } 

     string? Meaning { 
      get { return m_Meaning; } 
      set { m_Meaning = value; } 
     } 
    } 
} 
+15

'Chuỗi' đã bị vô hiệu. –

+19

Không có lý do gì mà câu hỏi này sẽ nhận được -1. Ngoài khả năng bị lừa đảo. –

Trả lời

164

Sử dụng string thay vì string? ở tất cả các vị trí trong mã của bạn.

Loại Nullable<T> yêu cầu T là một loại giá trị không thể rỗng, ví dụ: int hoặc DateTime. Các loại tham chiếu như string có thể đã bị vô hiệu. Sẽ không có điểm nào trong việc cho phép những thứ như Nullable<string> để nó không được phép.

Ngoài ra nếu bạn đang sử dụng C# 3.0 hoặc sau này bạn có thể đơn giản hóa mã của bạn bằng cách sử dụng auto-implemented properties:

public class WordAndMeaning 
{ 
    public string Word { get; set; } 
    public string Meaning { get; set; } 
} 
+1

M.Babcock, khi tôi thực hiện m_Word = null, lỗi, mọi đề xuất? Tôi muốn có thể thiết lập Word là null. – MiscellaneousUser

+1

@MisccellaneousUser: Bạn nhận được thông báo lỗi nào? Bạn có thể đăng tệp chính xác mà bạn đã cố gắng biên dịch không? Thật khó để đoán sai lầm của bạn là gì khi chỉ nhìn thấy một dòng mã của bạn. Tôi có nghĩa là nó có thể là bạn đang thiếu một dấu chấm phẩy ... nhưng có lẽ bạn chỉ quên sao chép + dán nó ... Đó là gì, nhưng phỏng đoán cho đến khi bạn đăng mã bạn đã cố gắng biên dịch. –

+0

Cảm ơn sự giúp đỡ, xem bài đăng này http://stackoverflow.com/questions/187406/c-sharp-nullable-string-error và có thể thấy rằng dấu chấm hỏi chỉ dành cho các loại giá trị. – MiscellaneousUser

46

string là một loại tài liệu tham khảo, một lớp. Bạn chỉ có thể sử dụng Nullable<T> hoặc T? đường cú pháp C# với các giá trị giá trị không có giá trị không rỗng như intGuid.

Đặc biệt, như string là một loại tài liệu tham khảo, một biểu hiện của loại string đã có thể được null:

string lookMaNoText = null; 
3

Đối với một rất cụ thể Loại lý do Nullable<int> đặt con trỏ vào Nullable và nhấn F12 - Các Metadata cung cấp lý do (Lưu ý các hạn chế struct):

public struct Nullable<T> where T : struct 
{ 
... 
} 

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+4

Lưu ý rằng mặc dù 'Nullable >' không được phép mặc dù 'Nullable ' là một cấu trúc. –

+0

Điều đó thật thú vị. Đó có phải là "mã hóa cứng" vào trình biên dịch không? Nó bị hạn chế như thế nào từ một cấu trúc cụ thể (Nullable >)? - Chỉnh sửa Tôi thấy bây giờ dường như nó là đặc biệt - Biên dịch Lỗi ... phải là một loại giá trị không nullable .... –

11

Syst em.String đã được nullable: bạn không cần phải khai báo nó như vậy (string? myStr) là sai.

Các vấn đề liên quan