C#에서 참조로 속성 전달
C#에서 참조로 속성을 전달한다는 것은 한 메서드에서 속성 값을 수정하고 해당 변경 사항을 다른 메서드에 반영하는 것을 의미합니다. 그러나 속성은 기본적으로 참조로 전달되지 않습니다. 이 동작을 달성하는 방법에는 여러 가지가 있습니다.
반환값
한 가지 방법은 getter 메서드에서 값을 반환하고 호출 메서드에서 속성을 업데이트하는 것입니다.
<code class="language-csharp">public string GetString(string input, string output) { if (!string.IsNullOrEmpty(input)) { return input; } return output; } public void Main() { Person person = new Person(); person.Name = GetString("test", person.Name); Debug.Assert(person.Name == "test"); }</code>
위임
또 다른 접근 방식은 속성을 설정하는 작업을 수행하는 대리자를 사용하는 것입니다.
<code class="language-csharp">public void GetString(string input, Action<string> setOutput) { if (!string.IsNullOrEmpty(input)) { setOutput(input); } } public void Main() { Person person = new Person(); GetString("test", value => person.Name = value); Debug.Assert(person.Name == "test"); }</code>
LINQ 표현
LINQ 표현식을 사용하여 리플렉션을 통해 속성을 업데이트할 수도 있습니다.
<code class="language-csharp">public void GetString<T>(string input, T target, Expression<Func<T, string>> outExpr) { if (!string.IsNullOrEmpty(input)) { MemberExpression expr = (MemberExpression)outExpr.Body; PropertyInfo prop = (PropertyInfo)expr.Member; prop.SetValue(target, input, null); } } public void Main() { Person person = new Person(); GetString("test", person, x => x.Name); Debug.Assert(person.Name == "test"); }</code>
반성
마지막으로 리플렉션을 사용하여 속성 값을 직접 설정할 수 있습니다.
<code class="language-csharp">public void GetString(string input, object target, string propertyName) { if (!string.IsNullOrEmpty(input)) { PropertyInfo prop = target.GetType().GetProperty(propertyName); prop.SetValue(target, input); } } public void Main() { Person person = new Person(); GetString("test", person, nameof(person.Name)); Debug.Assert(person.Name == "test"); }</code>
위 내용은 C#에서 참조로 속성을 전달하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!