2012-05-03 4 views
0

나는 그들이을 초기화 할 때 값 일치 포함 필드가 내 프로젝트의 개체 수 있습니다 - 예를 들어 아래의 코드를 참조 특히 AddedDateTimeModifiedDateTime 특성을 :피 복제 개체 이니셜 라이저 값

User user = new User() 
{ 
    FirstName = "Tex", 
    Surname = "Murphy", 
    AddedDateTime = DateTime.Now, 
    ModifiedDateTime = DateTime.Now 
}; 

는 그것에 설정 한 후에는 {...} 블록 내의 AddedDateTime의 값 ModifiedDateTime의 값을 설정하는 것이 가능하다?

나는 불가능하다고 생각하지만 확인을 요청할 가치가 있다고 생각했습니다.

코멘트에서 언급 한 바와 같이
+1

왜 당신이 시도하고 저희에게 알려하지 않습니다! – banging

+1

'ModifiedDateTime = AddedDateTime'을하면 어떻게됩니까? – mattytommo

+0

원하는 경우'AddedDateTime = ModifiedDateTime = DateTime.Now' 시도해도됩니다 .. – banging

답변

1

나는 당신의 후유증이 무엇이겠습니까?

var now = DateTime.Now; 
User user = new User 
{ 
    FirstName = "Tex", 
    Surname = "Murphy", 
    AddedDateTime = now, 
    ModifiedDateTime = now 
}; 

동일한 값으로 초기화하려면 해당 값을 공통 변수로 설정해야합니다.

+0

응답 (덕분에 모두들)에 따르면 이것이 유일한 실행 가능한 옵션 인 것처럼 보입니다 - 내가 원했던 대답이 아니라 차선책입니다. 나는 이것이 사실일지도 모른다라고 생각했다. 진짜 수치심. 닷넷 개체 이니셜 라이저는 동일한 초기화 블록 내에서 설정된 속성의 값을 가져올 수 없습니다. 고마워요 @ 리돌 – Bern

0
User user = new User 
      { 
       FirstName = "Tex", 
       Surname = "Murphy", 
       AddedDateTime = DateTime.Now < Something? DateTime.Now : SomeOtherValue, 
       ModifiedDateTime = DateTime.Now < Something? DateTime.Now : SomeOtherValue 
      }; 
+0

내가 원하는 대상이 아닙니다. 내가 ModifiedDateTime을 AddedDateTime으로 설정하면 AddedDateTime을 설정하려고합니다. 그것이 가능하다면. – Bern

0

, 당신은 또한 클래스의 인스턴스를 생성하는 헬퍼 메소드를 가질 수 필요한 데이터 만, 즉 :

public User(string firstName, string sirname) 
{ 
    FirstName = firstName, 
    Surname = sirname, 
    AddedDateTime = DateTime.Now, 
    ModifiedDateTime = DateTime.Now 
}; 

를 포함 생성자를 만들 수 있습니다.

public static User CreateUser(string firstName, string sirname, string otherdata) 
{ 
    User newUser = new User(); 
    newUser.FirstName = firstName, 
    newUser.Surname = sirname, 
    newUser.AddedDateTime = DateTime.Now, 
    newUser.ModifiedDateTime = DateTime.Now, 
    newUser.SomeField = otherdata, 
    newUser.SomeOtherField = otherdata 

    return newUser; 
}; 
+0

내 목표는 코드를 가능한 한 축약 된 상태로 유지하고 DateTime.Now를 두 번 호출하지 않는 것입니다. 이상적으로는 값을 초기화시 ModifiedDateTime에 반영해야합니다. 죄송합니다. 위의 제안 사항에 만족하지만 문제는 해결하지 못합니다. – Bern

+0

어떻게 문제를 해결하지 않습니까? 이 두 메서드 중 처음 두 가지를 사용하면'DateTime.Now'를 한 번 입력 할 필요가 없습니다. 세 번째 코드 스 니펫은 모든 생성 객체간에 공통적이지 않은 데이터 일부가 있지만 두 개 이상의 속성으로 설정된 일반적인 경우를 다룹니다.이것이 당신의 정확한 문제를 해결하지 못한다면, 아마 당신은 완성 된 제품이하기를 원하는 것을 제공해야 할 것입니다. – Servy

+0

첫 번째 질문에 대한 답변에서 내가 제기 한 초기 문제를 해결하지 못했다는 응답은 DateTime.Now 속성에 두 번 액세스하지 않는 것입니다. – Bern

0

당신은에 로직을 넣어 수 : 그들은 또한 같은 것을 가질 수

public static User CreateUser(string firstName, string sirname) 
{ 
    User newUser = new User(); 
    newUser.FirstName = firstName, 
    newUser.Surname = sirname, 
    newUser.AddedDateTime = DateTime.Now, 
    newUser.ModifiedDateTime = DateTime.Now 

    return newUser; 
}; 

(당신은 클래스 자체를 통제 할 수없는 경우이 유용) 클래스의 내부에 또는 없습니다 ModifiedDateTime의 최소값을 확인하고 이에 따라 설정 한 AddedDateTime의 setter입니다. 예 :

public DateTime ModifiedDateTime { get; set; } 
private DateTime _addedDateTime; 
public DateTime AddedDateTime { 
    get { return _addedDateTime; } 
    set 
    { 
     if (ModifiedDateTime == DateTime.MinValue) 
     { 
      ModifiedDateTime = _addedDateTime = value; 
     }; 
    } 
} 

... 

var test = new Test 
{ 
    AddedDateTime = DateTime.Now 
}; 
1

당신은 어쩌면 속성의 구현에이 논리를 넣을 수 있습니다 :

public class User{ 
    private DateTime added; 
    private DateTime? modified; 

    string FirstName {get;set;} 
    string SurName {get;set;} 

    DateTime AddedDateTime { 
    get { return added; } 
    set { added = value; 
     modified = modified ?? value; 
     } 
    } 

    DateTime? ModifiedDateTime { 
    get { return modified } 
    set { modified = value; } 
    } 
} 
관련 문제