속성 이름을 가진 개체를 람다 매개 변수로 사용하고 전달 된 개체에 사용할 수 있지만 다른 개체에 사용하는 메서드를 작성하려고합니다. 그 메소드 내에서 생성 된 동일한 유형.호출 할 재사용 가능한 속성을 람다에 의해 전달 된
목표는 두 개체에서 동일한 속성을 사용하는 것입니다. 속성 이름은 매개 변수로 메서드에 전달되어야합니다 (람다 식).
(컴파일되지 않습니다) 제가 지금까지 작성한 것을 보여 드리겠습니다 :
개체 사용 : 다른 클래스에서
public class ObjectMy
{
public string Prop1 {get; set;}
}
방법은 상기 목적으로 사용되는 :
public class TestClass1
{
public void DoSomethingOnProperty(Expression<Func<ObjectMy,string>> propertyName)
{
var object1 = new ObjectMy();
var propertyNameProp = propertyName.Body as MemberExpression;
propertyNameProp.Member = "Test string"; // error Member is readonly
//DoSomethingOnProperty(object1.thesameproperty...)
}
}
ObjectMy 인스턴스의 메서드 이름 속성에 "Test string" 을 전달한 다음 ObS의 새 인스턴스 인 DoSomethingOnProperty를 재귀 적으로 호출하려고합니다. ectMy이고 DoSomethingOnProperty에 대한 첫 번째 호출에서 제공된 것과 동일한 특성 이름을 사용하십시오.
나는
DoSomethingOnProperty(obj=>obj.Prop1);
감사처럼 전화를하고 싶습니다.
처럼 사용할 수 있습니다! .Select (x => DoSomethingOnPropery (x)). 메서드는 DoSomethingOnPropery가 void를 사용하지 않고 값을 반환해야합니다. 그냥 값을 변경하려면 코드를 for 루프에 넣으십시오. – jdweng
그래서'DoSomethingOnProperty'는 여러 객체에서 같은 속성을 수정해야합니까? 그렇다면 '속성 이름'인수 만 있지만 ObjectMy 인수는없는 이유는 무엇입니까? 코드를 나타내는 표현식을 수정하려고합니다. 이 시점에서 전혀 작동하지 않는 'ObjectMy' 인스턴스도 없습니다. –
당신의 문제를 올바르게 이해했다면, 훨씬 더 쉬운 해결책은 set-property 메쏘드를 전달하는 것이므로, 당신의 메쏘드는 원하는만큼 많은 객체에서 그것을 호출 할 수 있습니다 : DoSomethingOnProperty (Action setProperty) {var object1 = 새로운 ObjectMy(); setProperty (object1, "테스트 문자열"); ...}'. 그러면 다음과 같이 호출 할 수 있습니다 :'DoSomething ((obj, value) => {obj.Prop1 = value;})'. –