var p = {"p1": "value1", "p2": "value2", "p3": "value3"};
for (var key in p) if (p.hasOwnProperty(key)) {
var value = p[key];
console.log(key, value);
}
Нет, необходимо будет использовать "традиционные" определения свойства для пользовательского поведения.
Нет Вы не можете: автоматическое свойство является ярлыком для явного средства доступа к частному полю. например.
public string Name { get; set;}
ярлык на
private string _name;
public string Name { get { return _name; } set { _name = value; } };
Если Вы хотите поместить пользовательскую логику, необходимо записать, получают и устанавливают явно.
Обратитесь к PostSharp. Это - платформа AOP для обычно проблемы "этот шаблон кода, я делаю сотню времени день, как я могу автоматизировать его?". Можно упростить с PostSharp это (например):
public Class1 DoSomething( Class2 first, string text, decimal number ) {
if ( null == first ) { throw new ArgumentNullException( "first" ); }
if ( string.IsNullOrEmpty( text ) ) { throw new ArgumentException( "Must be not null and longer than 0.", "text" ) ; }
if ( number < 15.7m || number > 76.57m ) { throw new OutOfRangeArgumentException( "Minimum is 15.7 and maximum 76.57.", "number"); }
return new Class1( first.GetSomething( text ), number + text.Lenght );
}
кому:
public Class1 DoSomething( [NotNull]Class2 first, [NotNullOrEmpty]string text, [InRange( 15.7, 76.57 )]decimal number ) {
return new Class1( first.GetSomething( text ), number + text.Lenght );
}
Но это не все!:)
Вы могли рассмотреть использование PostSharp для записи перехватчиков методов set. Это - и LGPL и GPLed, в зависимости от которых частей библиотеки Вы используете.
Если это будет поведение, то Вы повторитесь много во время разработки, можно создать отрывок пользовательского кода для специального типа свойства.
Самое близкое решение, о котором я могу думать, использует вспомогательный метод:
public void SetProperty<T>(string propertyName, ref T field, T value)
{ field = value;
NotifyPropertyChanged(propertyName);
}
public Foo MyProperty
{ get { return _myProperty}
set { SetProperty("MyProperty",ref _myProperty, value);}
} Foo _myProperty;