I가 문제의 경우에 Reflection.Emit를파라미터 불일치 (복싱 진수?)
void IPropertyCreator.AddAttribute<T>(params object[] args)
{
// Convert args to types
var argTypes = new Type[args.Length];
for (int i = 0; i < args.Length; ++i)
{
argTypes[i] = args[i] != null ? args[i].GetType() : null;
}
// Get constructor
var ctorInfo = typeof(T).GetConstructor(argTypes);
// Create custom attribute
var attrBuilder = new CustomAttributeBuilder(ctorInfo, args);
_propertyBuilder.SetCustomAttribute(attrBuilder);
}
을 이용하여 인터페이스를 생성하는 시스템의 일부로서, I가 속성에 다음 코드를 작성하고있다 (생성자 단일 object
파라미터 인수 복용와 T
typeparam)는 속성이있는 decimal
(전용)은 다음 생성자
public DefaultValueAttribute(object value)
,
이 코드는 모든 POD 유형 (byte
, char
, int
등) 및 string
과 잘 작동하지만 decimal
을 사용할 때 오류가 발생합니다. CustomAttributeBuilder
의 생성자가 예외가 발생하여 실패합니다. "인덱스 0에서 전달 된 인수 값이 매개 변수 유형"과 일치하지 않습니다.
args
는
ctorInfo
System.Decimal
올바르게 오브젝트 파라미터를 취하는 (만) 생성자를 선택한 object{decimal}
argTypes
한 요소 유형이 유형의 하나 개의 원소 = 가지고
디버깅 예상대로 모든 변수임을 나타낸다.
나는 특성이 바로 소수 파라미터를 전달하여 인스턴스화 될 수 있음을 증명하고있다 : I는 object
없고 취지 System.Decimal
에 소수 변환 시도
decimal val = 123.456M;
var attr = new DefaultValueAttribute(val);
. 이 문제는 decimal
이 POD 유형이 아니라 구조라는 사실과 관련이 있다고 생각됩니다.
속성에 생성자 오버로드를 추가하려고 시도했습니다 (유형은 decimal
입니다). 위 함수가 새 생성자를 올바르게 가져 왔지만 예외가있는 동일한 위치에서 실패했습니다. "잘못된 유형이 사용자 정의 속성 생성자 인수, 필드 또는 속성으로 사용되었습니다."
아무도 아이디어가 없습니다. 이 문제를 해결할 수 있을까요?