Присвойте значения массива к отдельным переменным в одной строке

Грязный 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);
}
21
задан abatishchev 1 May 2018 в 17:44
поделиться

6 ответов

Это невозможно в C #.

Самое близкое, что я могу придумать, - это использовать инициализацию в одной строке с индексами

strArr = new string[]{"foo","bar"};
string str1 = strArr[0], str2 = strArr[1];
14
ответ дан 29 November 2019 в 20:59
поделиться

Вы можете сделать это в одной строке, но не как один оператор.

Например:

int str1 = "hey"; int str2 = "now";

Python и ruby ​​поддерживают задание, которое вы пытаетесь выполнить; C # этого не делает.

2
ответ дан 29 November 2019 в 20:59
поделиться

Я не уверен, что я хочу возможно в C #.

Это не так.

2
ответ дан 29 November 2019 в 20:59
поделиться

Нет, но вы можете инициализировать массив строк:

string[] strings = new string[] {"hey", "now"};

Хотя это, вероятно, не слишком полезно для вас. Честно говоря, нетрудно разделить их на две строчки:

string str1 = "hey";
string str2 = "now";
0
ответ дан 29 November 2019 в 20:59
поделиться

Реальным примером использования этого является предоставление удобного способа возврата нескольких значений из функции. То есть это функция 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 очень ограничено, так что пока не существует допустимого применения для вышеупомянутого синтаксиса "множественного объявления".

4
ответ дан 29 November 2019 в 20:59
поделиться

Вы можете сделать это на C#

string str1 = "hey", str2 = "now";

или проявить фантазию вот так

        int x, y;
        int[] arr = new int[] { x = 1, y = 2 };
2
ответ дан 29 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: