字符串”不包含的定义,并且找不到可访问的扩展方法,该方法接受类型为“字符串”的第一个参数

时间:2019-10-05 19:37:56

标签: c# string linq

我在为作业创建成功的LINQ语句时遇到麻烦。我不断收到相同的错误:“字符串”不包含的定义,找不到可以接受的扩展方法,该方法接受类型为“字符串”的第一个参数(是否缺少using指令或程序集引用?)

我已经对LINQ语句进行了几次编辑,并且还查找了一些示例。也许只是缺乏理解,但是我正在写的“ UppercaseWords”语句继续出现相同的错误。在尝试了我收集的大多数事情后,发现了错误,然后我发现下一个最好的事情就是问问自己。

using System;
using System.Linq;
using System.Collections.Generic;
//using System.Configuration;

namespace Assignment6
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string UserInput;
            List<string> ListOfWords = new List<string>();
            ListOfWords.Add("");


            Console.Write("   Enter First Name:       ");
            UserInput = Console.ReadLine();
            ListOfWords.Add(UserInput);

            Console.Write("   Enter Last Name:       ");
            UserInput = Console.ReadLine();
            ListOfWords.Add(UserInput);

            Console.Write("   Enter Street:       ");
            UserInput = Console.ReadLine();
            ListOfWords.Add(UserInput);

            Console.Write("   Enter City:       ");
            UserInput = Console.ReadLine();
            ListOfWords.Add(UserInput);

            Console.Write("   Enter State:       ");
            UserInput = Console.ReadLine();
            ListOfWords.Add(UserInput);

            Console.Write("   Enter Zip:       ");
            UserInput = Console.ReadLine();
            ListOfWords.Add(UserInput);


            var ProcessedOut =
                from word in ListOfWords
                let uppercaseString = word.UppercaseWords()
                select uppercaseString;

            foreach (var word in ProcessedOut)
                Console.Write("{0}", word);

            Console.WriteLine();

        }


        //string being passed in is a word or phrase
        public static string UppercaseWords(string value)

        {
            //make an array from character in word 
            //takes each letter from the word to create an array element 
            char[] array = value.ToCharArray();

            if (array.Length >= 1)
            {
                if (char.IsLower(array[0]))
                {
                    array[0] = char.ToUpper(array[0]);
                }
            }

            for (int i = 1; i < array.Length; i++)
            {
                if (array[i - 1] == ' ')
                {
                    if (char.IsLower(array[i]))
                    {
                        array[i] = char.ToUpper(array[i]);
                    }
                }
            }
            return new string(array);
        }




    }

我希望输出的每个数据都在每个单词的开头加上大写字母。

我必须为分配包含“公共静态字符串UppercaseWords(字符串值)”下的所有代码。

在此先感谢您能提供帮助的人。

2 个答案:

答案 0 :(得分:1)

如果您要创建扩展方法,则需要执行以下操作

public static class Word
{
    //string being passed in is a word or phrase
    public static string UppercaseWords(this string value)
    {
        //make an array from character in word 
        //takes each letter from the word to create an array element 
        char[] array = value.ToCharArray();

        if (array.Length >= 1)
        {
            if (char.IsLower(array[0]))
            {
                array[0] = char.ToUpper(array[0]);
            }
        }

        for (int i = 1; i < array.Length; i++)
        {
            if (array[i - 1] == ' ')
            {
                if (char.IsLower(array[i]))
                {
                    array[i] = char.ToUpper(array[i]);
                }
            }
        }
        return new string(array);
    }
}

答案 1 :(得分:0)

您要在UpperCaseWords()上调用word,因此它将在默认的string方法库中查找该方法(请参见{{ 3}})。

您的方法没有扩展string类(将自己的方法添加到string的库中),并且它被声明为static,因此您可以像这样简单地调用它:

var ProcessedOut =
    from word in ListOfWords
    let uppercaseString = UppercaseWords(word)
    select uppercaseString;

static表示该方法属于自身而不是特定的对象实例,因此可以独立调用(如上所述),并且在您的情况下,它期望将字符串作为参数,因此我们将其命名为{{1 }}。