Грязный Quick'n:
Первый создают Ваш ConfigurationSection и классы ConfigurationElement :
public class MyStuffSection : ConfigurationSection
{
ConfigurationProperty _MyStuffElement;
public MyStuffSection()
{
_MyStuffElement = new ConfigurationProperty("MyStuff", typeof(MyStuffElement), null);
this.Properties.Add(_MyStuffElement);
}
public MyStuffElement MyStuff
{
get
{
return this[_MyStuffElement] as MyStuffElement;
}
}
}
public class MyStuffElement : ConfigurationElement
{
ConfigurationProperty _SomeStuff;
public MyStuffElement()
{
_SomeStuff = new ConfigurationProperty("SomeStuff", typeof(string), "<UNDEFINED>");
this.Properties.Add(_SomeStuff);
}
public string SomeStuff
{
get
{
return (String)this[_SomeStuff];
}
}
}
Тогда сообщает платформе, как обработать Ваши классы конфигурации в [1 111] web.config:
<configuration>
<configSections>
<section name="MyStuffSection" type="MyWeb.Configuration.MyStuffSection" />
</configSections>
...
И на самом деле добавляют Ваш собственный раздел ниже:
<MyStuffSection>
<MyStuff SomeStuff="Hey There!" />
</MyStuffSection>
Тогда можно использовать его в коде таким образом:
MyWeb.Configuration.MyStuffSection configSection = ConfigurationManager.GetSection("MyStuffSection") as MyWeb.Configuration.MyStuffSection;
if (configSection != null && configSection.MyStuff != null)
{
Response.Write(configSection.MyStuff.SomeStuff);
}
Это невозможно в C #.
Самое близкое, что я могу придумать, - это использовать инициализацию в одной строке с индексами
strArr = new string[]{"foo","bar"};
string str1 = strArr[0], str2 = strArr[1];
Вы можете сделать это в одной строке, но не как один оператор.
Например:
int str1 = "hey"; int str2 = "now";
Python и ruby поддерживают задание, которое вы пытаетесь выполнить; C # этого не делает.
Нет, но вы можете инициализировать массив строк:
string[] strings = new string[] {"hey", "now"};
Хотя это, вероятно, не слишком полезно для вас. Честно говоря, нетрудно разделить их на две строчки:
string str1 = "hey";
string str2 = "now";
Реальным примером использования этого является предоставление удобного способа возврата нескольких значений из функции. То есть это функция Ruby, которая возвращает фиксированное количество значений в массиве, а вызывающая сторона хочет получить их в двух отдельных переменных. Именно здесь функция имеет наибольший смысл:
first_name, last_name = get_info() // always returns an array of length 2
Чтобы выразить это на C#, вы бы пометили два параметра символом out
в определении метода и вернули void
:
public static void GetInfo(out string firstName, out string lastName)
{
// assign to firstName and lastName, instead of trying to return them.
}
И так далее:
string firstName, lastName;
SomeClass.GetInfo(out firstName, out lastName);
Это не так красиво. Надеюсь, в какой-нибудь будущей версии C# это будет возможно:
var firstName, lastName = SomeClass.GetInfo();
Чтобы это сделать, метод GetInfo
будет возвращать Tuple
. Это было бы не ломающим изменением в языке, поскольку текущее легальное использование var
очень ограничено, так что пока не существует допустимого применения для вышеупомянутого синтаксиса "множественного объявления".
Вы можете сделать это на C#
string str1 = "hey", str2 = "now";
или проявить фантазию вот так
int x, y;
int[] arr = new int[] { x = 1, y = 2 };