2016-04-01 2 views
5

Как создать строку типа «Вы сделали это!». появляются из булевского прохода/сбой вместо «True» или «False»? Я только когда-либо могу найти метод ToString, но все, что делает, это изменение «Истина» на «Истина». Я хочу знать, как заставить строку выводить все, что я хочу.String from Boolean

+7

Я не совсем уверен, но вы хотите что-то вроде 'string s = boolValue? «Это правда»: «Это ложь», '? – juharr

+3

Почему вы не используете простой оператор IF. Если он вернет «True», то покажет одну фразу, false получит другую. Похоже, Джонсополис избил меня до ответа. – logixologist

+1

Я просто хотел сказать AdmiralCuddles спасибо за сообщение хорошего вопроса уровня начинающего. Многие новые пользователи жалуются на то, что они проголосовали за вопросы более низкого уровня, но ответ на этот вопрос показывает, что реальная проблема заключается в том, что они задают плохие вопросы. Продолжайте и приветствуйте Stack Overflow! –

ответ

7

A bool - это тип, так же, как и string. Вы никогда не сможете получить тип bool, чтобы показать «Вы сделали это!», Потому что его bool - это может быть только true или false.

Вы хотите создать строку на основе результата булева. Похоже, вы хотите if заявление:

string myString; 
if(myBool) // if true 
{ 
    myString = "You did it!"; 
} 
else 
{ 
    myString = "You didn't do it"; 
} 

как показал @juharr, есть способы, чтобы сделать это в менее строк кода, но это логика, которая должна произойти.

В качестве примечания, вы видите, метод ToString на bool, потому что каждый тип наследования от System.Object наследует метод ToString, предоставляя вам строковое представление этого объекта. Это неприменимо для того, чего вы хотите достичь здесь.

+1

Также стоит отметить, что стандартная реализация 'ToString()' по умолчанию - это полное имя типа, если только тип не переопределил реализацию. – Tim

0

Чтобы отобразить строку в вашей точки зрения при использовании привязки вы можете использовать пользовательские IValueConverter данные:

public class BoolToStringConverter : IValueConverter 
{ 
    public string TrueString { get; set; } 
    public string FalseString { get; set; } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var boolValue = (bool)value; 

     return boolValue ? TrueString : FalseString; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

XAML:

<stackOverflow:BoolToStringConverter x:Key="BoolToStringConverter" TrueString="You did it!" FalseString="You didn't do it"/> 

<TextBlock Text="{Binding WasItDone, Converter={StaticResource BoolToStringConverter}}"/> 
0

Я думаю, что создание Extension Method тем ближе вы можете получить от чего вы хотите.

Создать BoolExtensions класс:

public static class BoolExtensions 
{ 
    public static string ToString(this bool boolean, string valueIfTrue, string valueIfFalse) 
    { 
     return boolean ? valueIfTrue : valueIfFalse; 
    } 
} 

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

static void Main(string[] args) 
{ 
    var trueBoolean = true; 
    Console.WriteLine(trueBoolean.ToString("You did it!", "You didn't do it")); 
    var falseBoolean = false; 
    Console.WriteLine(falseBoolean.ToString("You did it!", "You didn't do it")); 
    Console.ReadKey(); 
} 

Обратите внимание, что оба BoolExtensions класса, и это ToString метод помечаются как static

0

Вы не можете переопределить метод ToString известного типа в C#, но вы можете создавать методы расширения, если вы будете использовать это Строка во многих частях кода вы можете создать метод для этого, как:

public static class Extensions 
{ 
    public static string ToStringCustom(this bool booleanValue) 
    { 
     if(booleanValue) 
      return "You did it"; 
     else 
      return "You didn't do id"; 
    } 
} 

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

Console.WriteLine(true.ToStringCustom()) 

отпечатывается "Ты сделал это".

2

Если вы используете C# 3.0 или выше, вы также можете поместить это в extension method для BOOL так:

public static string ToDidItOrNotString(this bool b) 
{ 
    return b ? "You did it!" : "You did not do it."; 
} 

Тогда вы можете просто назвать это так:

string s = boolVal.ToDidItOrNotString(); 
+0

Если это не было необходимо во многих частях приложения, я бы не создал для него метод расширения. Это поразило бы меня как избыток. YMMV. – Tim

0

Если вы хотите использовать эту функцию в в нескольких местах вы можете создать метод расширения, например;

public static string YouDidIt(this bool value) 
{ 
    if (value) return "You did it!"; 

    return "You failed"; 
} 

Тогда вы можете использовать его как;

bool a = true; 
string s = a.YouDidIt();