W celu sprawdzenia, czy Type
(propertyType
) jest pustych, używam:poprawny sposób sprawdzić, czy typ jest Nullable
bool isNullable = "Nullable`1".Equals(propertyType.Name)
Czy jest jakiś sposób, aby uniknąć używania magicznych sznurki?
W celu sprawdzenia, czy Type
(propertyType
) jest pustych, używam:poprawny sposób sprawdzić, czy typ jest Nullable
bool isNullable = "Nullable`1".Equals(propertyType.Name)
Czy jest jakiś sposób, aby uniknąć używania magicznych sznurki?
Absolutnie - użyj Nullable.GetUnderlyingType
:
if (Nullable.GetUnderlyingType(propertyType) != null)
{
// It's nullable
}
pamiętać, że ta wykorzystuje nierodzajową klasę statyczną System.Nullable
zamiast generycznego struct Nullable<T>
.
Należy również pamiętać, że sprawdzi, czy to oznacza specyficzny (zamknięte) typ wartości zerowalne ... to nie będzie działać, jeśli używasz go na generycznego typu, na przykład
public class Foo<T> where T : struct
{
public Nullable<T> Bar { get; set; }
}
Type propertyType = typeof(Foo<>).GetProperty("Bar").PropertyType;
// propertyType is an *open* type...
Świetnie! Przyjmę, jak tylko będę mógł! –
Wygląda na to, że znalazłeś bardzo interesującą niezgodność między specyfikacją (twój link w pierwszym wierszu) a rzeczywistym zachowaniem. Dla twojego obiektu 'propertyType' z ostatniego wiersza jest przeciw-przykład. Mam na myśli to, że 'Nullable.GetUnderlyingType (propertyType)' nie ** nie ** zwraca null (zwraca twoje 'T'), chociaż' propertyType' jest typem _open_ generic ('propertyType.ContainsGenericParameters'). Trochę eksperymentowałem i wygląda na to, że otwarty rodzaj ogólny z '' Nullable'1'' jest w porządku _nie ma żadnych_ parametrów Parametr type jest dokładnie 'T' od' typeof (Nullable <>). GetGenericArguments() [0] '. –
Co masz na myśli, mówiąc: "zwraca T"? To brzmi jak warto dodać jako nowe pytanie, z krótkim, ale pełnym przykładem. –
Poniższy kod służy do określania, czy obiekt typu reprezentuje typ z możliwością zerowania. Pamiętaj, że ten kod zawsze zwraca wartość false, jeśli obiekt Type został zwrócony z wywołania metody GetType.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
wyjaśnione w poniższym MSDN link:
http://msdn.microsoft.com/en-us/library/ms366789.aspx
Ponadto istnieje podobna dyskusja w tym SO QA:
Sprawdź, czy typ jest 'Nullable '? Jeśli tak, zajrzyj na http://stackoverflow.com/questions/374651/how-to-check-if-an-object-is-nullable –