Ich habe diesen CodeReflexion von Objekteigenschaften
public class ParameterOrderInFunction : Attribute
{
public int ParameterOrder { get; set; }
public ParameterOrderInFunction(int parameterOrder)
{
this.ParameterOrder = parameterOrder;
}
}
public interface IGetKeyParameters
{
}
public class Person: IGetKeyParameters
{
[ParameterOrderInFunction(4)]
public string Age { get; set; }
public string Name { get; set; }
[ParameterOrderInFunction(3)]
public string Address { get; set; }
[ParameterOrderInFunction(2)]
public string Language { get; set; }
[ParameterOrderInFunction(1)]
public string City { get; set; }
public string Country { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Address = "my address";
person.Age = "32";
person.City = "my city";
person.Country = "my country";
Test t = new Test();
string result = t.GetParameter(person);
//string result = person.GetParameter();
Console.ReadKey();
}
}
public class Test
{
public string GetParameter(IGetKeyParameters obj)
{
string[] objectProperties = obj.GetType()
.GetProperties()
.Where(p => Attribute.IsDefined(p, typeof(ParameterOrderInFunction)))
.Select(p => new
{
Attribute = (ParameterOrderInFunction)Attribute.GetCustomAttribute(p, typeof(ParameterOrderInFunction), true),
PropertyValue = p.GetValue(this) == null ? string.Empty : p.GetValue(this).ToString()
})
.OrderBy(p => p.Attribute.ParameterOrder)
.Select(p => p.PropertyValue)
.ToArray();
string keyParameters = string.Join(string.Empty, objectProperties);
return keyParameters;
}
}
Was ich zu tun versuchen zu Eigenschaften Werte als eine Zeichenfolge mit etwas bestellen.
es funktioniert gut, wenn ich die Funktion GetParameter innerhalb der Personenklasse setzen. jedoch möchte ich die Funktion GetParameter mit anderen Klasse auch verwenden, , so dass ich leere Schnittstelle erstellen. Jetzt möchte ich, dass jedes Objekt vom Typ IGetKeyParameters die Funktion verwenden kann. aber ich bin immer Ausnahme in der Zeile:
PropertyValue = p.GetValue(this) == null ? string.Empty : p.GetValue(this).ToString()
'aber ich bekomme eine Ausnahme in der Zeile 'bitte posten Sie die Ausnahme. – Stefan
NullReferenceException? –
{"Objekt stimmt nicht mit dem Zieltyp überein."} – dan