Kesalahan Pengompilasi CS0313
Jenis 'type1' tidak dapat digunakan sebagai parameter jenis 'parameter name' dalam jenis generik atau metode 'type2’. Jenis 'type1' yang dapat diubah ke null tidak memenuhi batasan 'type2'. Jenis yang dapat diubah ke null tidak dapat memenuhi batasan antarmuka apa pun.
Jenis nilai yang dapat diubah ke null tidak setara dengan rekan yang tidak dapat diubah ke null. Dalam contoh berikut, ImplStruct
memenuhi batasan BaseInterface
tetapi ImplStruct?
tidak karena Nullable<ImplStruct>
tidak menerapkan BaseInterface
.
Menggunakan kode yang mengikuti sebagai contoh, salah satu solusinya adalah menentukan
ImplStruct
biasa sebagai argumen jenis pertama dalam panggilan keTestMethod
. Kemudian ubahTestMethod
untuk membuat versi yang dapat diubah ke null dariImplstruct
dalam pernyataan pengembaliannya:return new Nullable<T>(t);
Kode berikut menghasilkan CS0313:
// cs0313.cs
public interface BaseInterface { }
public struct ImplStruct : BaseInterface { }
public class TestClass
{
public T? TestMethod<T, U>(T t) where T : struct, U
{
return t;
}
}
public class NullableTest
{
public static void Run()
{
TestClass tc = new TestClass();
tc.TestMethod<ImplStruct?, BaseInterface>(new ImplStruct?()); // CS0313
}
public static void Main()
{ }
}
Umpan balik .NET
.NET adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: