我嘗試使用 String.Contains 來回傳 true 或 false 以及此方法的訊息。但是,如果我輸入 cat (正確的單詞包含資料),我會收到 return false。至于當我輸入 dog 時,它是有效的,因為回傳是假的。所以一個問題是我如何為“貓”回傳一個真值。此外,這是我對代碼進行一些測驗時的結果。
Enter a search word: cat
The string 'My cat is Oliver' contains 'dog'? -> 'False'
False
Enter a search word: dog
The string 'My cat is Oliver' contains 'dog'? -> 'False'
False
這是我試圖回傳真或假的代碼。
string data = "My cat is Oliver";
string searchKey = "cat";
Console.Write("Enter a search word: ");
string searchWord = Console.ReadLine();
Console.WriteLine(SearchWord(searchKey, data));
bool SearchWord (string searchKey, string data)
{
string text = "My cat is Oliver";
string searchText = "searchKey";
string searchText2 = "dog";
bool result = text.Contains(searchText);
bool result1 = text.Contains(searchText2);
if (result == true)
{
Console.WriteLine("The string '{0}' contains '{1}'? -> '{2}'", text, searchText, result);
}
else
{
Console.WriteLine("The string '{0}' contains '{1}'? -> '{2}'", text, searchText2, result1);
}
return result;
}
uj5u.com熱心網友回復:
讓我們對您的代碼進行一些清理。
首先,術語:“資料”不是一個好的變數名。它不是很能描述它所代表的內容。這真的是你的“源”字串,所以讓我們使用它。“搜索關鍵字”很好,但更好的名稱是“搜索詞”(我們將稱之為“詞”)。我們還將在方法名稱中反映這一點。
將其放入方法簽名中。
bool SearchForTerm(string source, string term)
現在是方法的主體。讓這個方法執行兩個操作,回傳 true/false并列印到控制臺并不是一個好主意。只要讓這個方法做一件事。列印到控制臺應該是呼叫者的責任。
當然,我們實際上需要使用sourceandterm引數,而不是硬編碼的字串。
return source.Contains(term);
// that's it. that's the entire implementation of the method.
要呼叫它,您有一個硬編碼的源字串(您可以稍后將其更改為控制臺輸入),以及一個提示用戶輸入的術語。同樣,您需要在方法呼叫中使用來自該輸入捕獲的實際變數。
string source = "My cat is Oliver";
Console.Write("Enter a search word: ");
string term = Console.ReadLine();
bool containedTerm = SearchForTerm(source, term);
呼叫該方法后,您可以根據結果有條件地列印到螢屏上。
if (containedTerm)
{
Console.WriteLine("The string '{0}' contains '{1}'", source, term);
}
else
{
Console.WriteLine("The string '{0}' does not contain '{1}'", source, term);
}
把它們放在一起
bool SearchForTerm(string source, string term)
{
return source.Contains(term);
}
string source = "My cat is Oliver";
Console.Write("Enter a search word: ");
string term = Console.ReadLine();
bool containedTerm = SearchForTerm(source, term);
if (containedTerm) // braces removed for brevity, I do not recommend you do this
Console.WriteLine("The string '{0}' contains '{1}'", source, term);
else
Console.WriteLine("The string '{0}' does not contain '{1}'", source, term);
誠然,鑒于目前的代碼是多么微不足道SearchForTerm,該方法甚至不應該存在是有爭議的。考慮將其直接折疊到呼叫者的代碼中。
uj5u.com熱心網友回復:
您可以使用TryX這樣的模式:
void Main()
{
bool isFound = SearchWord("My cat is Oliver", "cat", out string message);
Console.WriteLine(isFound);
Console.WriteLine(message);
//
isFound = SearchWord("My cat is Oliver", "dog", out message);
Console.WriteLine(isFound);
Console.WriteLine(message);
}
public bool SearchWord(string data, string searchKey, out string message)
{
if(data.Contains(searchKey))
{
message = $"The string '{data}' contains '{searchKey}'";
return true;
}
else
{
message = $"The string '{data}' doesn't contain '{searchKey}'";
return false;
}
}
您可以經常看到這種模式(例如:)int.TryParse(),因此您可以在此處使用boolean方法的回傳值并檢查是否有out parameter message任何錯誤/成功訊息。
或者
您可以使用另一種方式,因此為您的結果創建一個自定義類,例如:
public class MyResult
{
public bool Succeed { get; set; }
public string Message { get; set; }
}
并像這樣使用:
void Main()
{
var result = SearchWord("My cat is Oliver", "cat");
Console.WriteLine(result.Succeed);
Console.WriteLine(result.Message);
//
result = SearchWord("My cat is Oliver", "dog");
Console.WriteLine(result.Succeed);
Console.WriteLine(result.Message);
}
public MyResult SearchWord(string data, string searchKey)
{
var retval = new MyResult();
if (data.Contains(searchKey))
{
retval.Message = $"The string '{data}' contains '{searchKey}'";
retval.Succeed = true;
}
else
{
retval.Message = $"The string '{data}' doesn't contain '{searchKey}'";
retval.Succeed = false;
}
return retval;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517958.html
上一篇:如何在dplyr的case_when中使用函式和多個引數?
下一篇:根據if陳述句更改頁面的屬性
