양식에서 솔리드 객체에 값 지정
3301 단어 대상
object value = Convert.ChangeType(valueStr, desiredType);
// valueStr desiredType
참고: Convert.ChangeType에서는 Nullable
1. ,
public static T ChangeType<T>(object value)
{
Type conversionType = typeof(T);
if (conversionType.IsGenericType
&& conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
{
return default(T);
}
conversionType = Nullable.GetUnderlyingType(conversionType);
}
return (T)Convert.ChangeType(value, conversionType);
}
2.
public static object ChangeType(object value, Type conversionType)
{
// Note: This if block was taken from Convert.ChangeType as is, and is needed here since we're
// checking properties on conversionType below.
if (conversionType == null)
{
throw new ArgumentNullException("conversionType");
} // end if
// If it's not a nullable type, just pass through the parameters to Convert.ChangeType
if (conversionType.IsGenericType
&& conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
// It's a nullable type, so instead of calling Convert.ChangeType directly which would throw a
// InvalidCastException (per http://weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx),
// determine what the underlying type is
// If it's null, it won't convert to the underlying type, but that's fine since nulls don't really
// have a type--so just return null
// Note: We only do this check if we're converting to a nullable type, since doing it outside
// would diverge from Convert.ChangeType's behavior, which throws an InvalidCastException if
// value is null and conversionType is a value type.
if (value == null)
{
return null;
} // end if
// It's a nullable type, and not null, so that means it can be converted to its underlying type,
// so overwrite the passed-in conversion type with this underlying type
System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType);
conversionType = nullableConverter.UnderlyingType;
} // end if
// Now that we've guaranteed conversionType is something Convert.ChangeType can handle (i.e. not a
// nullable type), pass the call on to Convert.ChangeType
return Convert.ChangeType(value, conversionType);
}
반사를 통해 대상의 모든 속성과 유형을 얻을 수 있으며, 모든 속성을 옮겨다니며 위의 함수를 대상에게 값을 부여할 수 있다.
public static void GetPost<T>(ref T t)
{
System.Collections.Specialized.NameValueCollection form = HttpContext.Current.Request.Form;
Type type = t.GetType();//
PropertyInfo[] pi = type.GetProperties();//
foreach (PropertyInfo p in pi)
{
if (form[p.Name] != null)
{
try
{
p.SetValue(t, ChangeType(form[p.Name], p.PropertyType), null);// ,
}
catch
{
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
List 컬렉션 객체에서 서로 다른 속성 크기로 정렬된 인스턴스인스턴스는 다음과 같습니다. 테스트: 출력 결과는 다음과 같습니다. 두 번째 방법은 컬렉션에 따라.sort 재부팅 방법(예: 마스터 클래스에서 이렇게 작성하면 됩니다. 출력 결과는 다음과 같습니다. 전자의 코드 구조...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.