2

事前入力された 2 番目にこのエラーが発生し続けます...型文字列を System.Collections.Generic.IEnumerable に暗黙的に変換できません。何が間違っているのかわかりません。

namespace HomeInventory2
{
    public partial class Form1 : Form
    {
        public Form1(string prepopulated)
        {
            InitializeComponent();
            IEnumerable<String> lines = prepopulated;
            textBoxAmount.Text = lines.ElementAtOrDefault(0);
            textBoxCategories.Text = lines.ElementAtOrDefault(1);
            textBoxProperties.Text = lines.ElementAtOrDefault(2);
            textBoxValue.Text = lines.ElementAtOrDefault(3);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void submitButton_Click(object sender, EventArgs e)
        {
            CreateInventory create = new CreateInventory();
            create.ItemAmount = textBoxAmount.Text;
            create.ItemCategory = textBoxCategories.Text;
            create.ItemProperties = textBoxValue.Text;
            create.ItemValue = textBoxValue.Text;

            InventoryMngr invtryMngr = new InventoryMngr();
            invtryMngr.Create(create);

        }
    }
4

6 に答える 6

4

この行

IEnumerable<String> lines = prepopulated;

prepopulatedは文字列であり、それを文字列のリストに割り当てようとしています。たぶん、最初にSplit()したいですか?または、フォームのコンストラクターが最初に文字列のリストを取る必要があるかもしれません。

于 2012-10-19T16:43:19.190 に答える
3

ここに割り当てようとしstringIEnumerable<string>います:

public Form1(string prepopulated)
{
    // ...
    IEnumerable<string> lines = prepopulated;
    // ...
}

コンストラクターを次のようにリファクタリングする必要があります。

public Form1(IEnumerable<string> prepopulated)
{
    // ...
    IEnumerable<string> lines = prepopulated;
    // ...
}
于 2012-10-19T16:43:31.250 に答える
2

単一の文字列をパラメーターとして受け取るコンストラクターがあります。

public Form1(string prepopulated)

次に、これを次のように設定しようとしていますIEnumerable<string>:

IEnumerable<String> lines = prepopulated;

代わりに、次を渡す必要がありますIEnumerable<string>

public Form1(IEnumerable<string> prepopulated)

prepopulated文字列が複数の文字列に解析できる文字列である場合は、代わりにそれを行うことができます。たとえば、改行で区切られた文字列が「事前入力」されている場合は、代わりに次のようにすることができます。

IEnumerable<String> lines = prepopulated.Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries); // Split into separate lines
于 2012-10-19T16:43:04.697 に答える
1

stringエラー メッセージに明確に示されているように、をに割り当てることはできませんIEnumerable<String>

に電話することをお勧めします.Split()

于 2012-10-19T16:42:58.847 に答える
0

IEnumerableに追加することはできませんが、次のいずれかを実行できます。

IEnumerable<String> lines = new List<string>();
//or
//IEnumerable<String> lines = Enumerable.Empty<string>();
//IEnumerable<String> lines = Enumerable.Repeat("My string",1); //only single value
//IEnumerable<String> lines = new string[] {"My string","My other string"}

//or
var lines = new List<string>();
lines.Add("My string");
lines.Add("My other string");   

IEnumerable<String> ienumLines = lines;
return ienumLines;

//or add an extension method

public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> items) 
{
    foreach(T item in items) 
    {
       collection.Add(item);
    }
}

よろしく

于 2012-10-19T16:46:35.120 に答える
0

prepopulatedパラメータを型として渡してみてくださいIEnumerable<String>

public Form1(IEnumerable<String> prepopulated)
{
    InitializeComponent();
    IEnumerable<String> lines = prepopulated;
    // ....
}

また

文字列が のようなものであると仮定するとABC, DEF, GHI、次のようなことができます。

// where String Split is based on comma (,)
IEnumerable<String> lines = prepopulated.Split(new[] { ',' }, 
    StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim());

次の結果が得られます。

ABC
DEF
GHI
于 2012-10-19T16:52:59.940 に答える