2009-02-27 81 views
19

Tôi có một cấu trúc đơn giản đã hạn chế sử dụng. Cấu trúc được tạo ra trong một phương thức gọi dữ liệu từ cơ sở dữ liệu. Nếu không có dữ liệu trả về từ cơ sở dữ liệu tôi muốn có thể trả về một null, nhưng Visual Studio than phiền, không thể chuyển đổi null thành PackageName.StructName vì nó là một kiểu giá trị không nullable.Tạo một loại giá trị không thể vô hiệu hóa có thể vô hiệu hóa

Làm cách nào để làm cho nó có thể vô hiệu?

Trả lời

10
public struct Something 
{ 
    //... 
} 

public static Something GetSomethingSomehow() 
{ 
    Something? data = MaybeGetSomethingFrom(theDatabase); 
    bool questionMarkMeansNullable = (data == null); 
    return data ?? Something.DefaultValue; 
} 
+1

Theo như tôi hiểu, mã này không trả về giá trị rỗng như Malfist muốn. –

+0

IIRC, nó được dự định như là một minh họa về việc sử dụng các loại nullable, vì poster dường như không hiểu chính xác chúng là gì. – mquander

+0

'mặc định (Cái gì đó)' có thể là giá trị trả về mặc định tốt hơn trong trường hợp không có giá trị nào tồn tại. –

3

Nullable<T> là lớp bao bọc tạo ra phiên bản có thể vô hiệu của loại T. Bạn cũng có thể sử dụng cú pháp T? (? Ví dụ int) để đại diện cho phiên bản nullable kiểu T.

6

Định nghĩa một struct Nullable<T> là:

struct Nullable<T> 
{ 
    public bool HasValue; 
    public T Value; 
} 

Nó được tạo ra theo cách này:

Nullable<PackageName.StructName> nullableStruct = new Nullable<PackageName.StructName>(params); 

Bạn có thể tắt mớ hỗn độn này bằng cách chỉ cần gõ:

PackageName.StructName? nullableStruct = new PackageName.StructName(params); 

Xem: MSDN

1

Bạn có thể làm một cái gì đó nullable ví dụ như thế này:

// Create the nullable object. 
int? value = new int?(); 

// Check for if the object is null. 
if(value == null) 
{ 
    // Your code goes here. 
} 
1

Sử dụng được xây dựng trong phím tắt cho Nullable<T> struct, bằng cách đơn giản thêm ? để tuyên bố:

int? x = null; 

if (x == null) { ... } 

Just giống nhau cho bất kỳ loại, cấu trúc nào khác, v.v.

MyStruct? myNullableStruct = new MyStruct(params); 
.210
0

Bạn có thể sử dụng mặc định như một sự thay thế

public struct VelocityRange 
{ 
    private double myLowerVelocityLimit; 
    private double myUpperVelocityLimit; 
} 

VelocityRange velocityRange = mặc định (VelocityRange);

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