Как получить ссылку на строковое свойство в C # - PullRequest
0 голосов
/ 25 февраля 2011

Скажем, у меня есть класс с тремя строковыми свойствами:

public class Foo
{
  public string Bar1 { get; set; }
  public string Bar2 { get; set; }
  public string Bar3 { get; set; }
}

Теперь скажите, что я хочу назначить одно из строковых свойств, но то, какое из трех свойств я назначаю, зависит от некоторого условия. Зная, что строки предположительно являются ссылочными типами, я мог бы испытать желание написать некоторый код, подобный этому:

string someString;
if (condition1) someString = foo.Bar1;
else if (condition2) someString = foo.Bar2;
else if (condition3) someString = foo.Bar3;
someString = "I can't do that, Dave.";

Это не работает. Я знаю, что это как-то связано с неизменяемостью строк (по крайней мере, я так думаю), но я понятия не имею, как это сделать.

Струны в основном сбивают меня с толку.

Хм, да, поэтому мой вопрос, какой самый краткий способ сделать это?

Ответы [ 3 ]

2 голосов
/ 25 февраля 2011

Просто сделайте это так:

string someString = "I can't do that, Dave.";
if (condition1) foo.Bar1 = someString;
else if (condition2) foo.Bar2 = someString;
else if (condition3) foo.Bar3 = someString;

C # старается максимально упростить работу со строками. Они являются примитивными типами, поэтому вам не нужно беспокоиться об изменчивости, памяти, адресах или о чем-либо подобном.

2 голосов
/ 25 февраля 2011

Лично я, вероятно, просто выбрал бы свойство:

string value = "I can't do that, Dave.";
if (condition1) foo.Bar1 = value;
else if (condition2) foo.Bar2 = value;
else if (condition3) foo.Bar3 = value;

Если вы действительно хотите использовать предложенный вами подход, вы можете заключить его в делегата, я думаю:

Action<string> assignString;
if (condition1) assignString = s => foo.Bar1 = s;
else if (condition2) assignString = s => foo.Bar2 = s;
else if (condition3) assignString = s => foo.Bar3 = s;
assignString("I can't do that, Dave.");

... но в этом случае это только усложнит ситуацию. Что касается сценария, описанного в этом вопросе, я не могу придумать причину, по которой вы захотите это сделать.

0 голосов
/ 25 февраля 2011

Вы всегда можете сделать это так:

отредактировано **

var someString = (условие1)? foo.Bar1: (условие2)? foo.Bar2: (условие3)? foo.Bar3: «Я не могу сделать этого Дэйва»;

Дайте мне знать, как вы идете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...