2013-03-05 2 views
4

다음 생성자에서 ID로 새 Guid를 추가하는 개체가 있습니다. 가능C# 개체 초기화 : 다른 하나에서 속성 설정

var obj = new MyObject 
{ 
    Test = Id; // Get new GUID created in constructor 
} 

인가 :

public class MyObject 
{ 
    public MyObject() 
    { 
    Id = Guid.NewGuid().ToString(); 
    } 

    public String Id { get; set; } 
    public String Test { get; set; } 

} 

나는 개체 이니셜 라이저에서 그런 일을하고 싶지?

답변

8

아니요, 그렇게 할 수 없습니다. 당신은 별도의 성명에서 설정해야 할 것 : 객체에는 고유의 연결이 초기화되고 있지으로

var obj = new MyObject(); 
obj.Test = obj.Id; 

개체 이니셜 라이저에서 속성의 오른쪽, 그냥 보통의 표현이다. 이것은 당신이 정기적으로 하나 개의 특정 유형에하고 싶은 일이 있으면, 당신이 방법을 추가 할 수

: 다음

public MyObject CopyIdToTest() 
{ 
    Test = Id; 
    return this; 
} 

및 사용 :

MyObject obj = new MyObject().CopyIdToTest(); 

또는 다른 특성을 가진 :

MyObject obj = new MyObject 
{ 
    // Set other properties here 
}.CopyIdToTest(); 
1

아니요 - 이니셜 라이저의 개체 속성에 액세스 할 수 없습니다. 이니셜 라이저는 기본적으로 프로그래머에게 통용되는 설탕이다.

이 같은 상황을 고려

class Program 
{ 
    static void Main() 
    { 
    var Id = "hello"; 
    var obj = new MyObject 
     { 
      Test = Id // Get new GUID created in constructor 
     }; 
    } 
} 

Id (당신의 생각을 다시는하지 않은, 유효 경우) 할당 것 반드시 Id 당신이 점점 될 것 없습니다.

+1

이니셜 라이저의 "속성 설정"부분이 실행되기 전에 생성자 *가 * 완료되었음을 유의하십시오. –

+0

예 - 초기화 작업을 구성과 병합하고있었습니다. 선명도를 위해 수정 해 드리겠습니다. –

관련 문제