如何使用自定义类型正确初始化变量

时间:2017-12-30 12:57:24

标签: c# database initialization

这是C#中的代码:

public bool IsNation(string country)
    {
        for (int i = 0; i < Nations.Count; i++)
        {

            if (Nations[i].Name == country)
            {
                return true;
            }
            else { return false; }

        }return true;

    }

在C#中,您必须初始化变量。但是如果你在下面制作了自己的一个呢?

public class WorldMarket
    {
        public WorldMarket()
        {
            Nations = new List<NationBuilder>();
        }

        internal List<NationBuilder> Nations { get; set; }

        public void AddToWorldMarket(NationBuilder nation)
        {
            Nations.Add(nation);
        }

主要思想是从这个结构:

- wm
   - Nations
      - [0]
          - Name "USA"
          - stockpile 
            - [0]
                - Name "Coal"
                - Quantity "quantity"
                - Value "value"
      - [1] //Same as above

查找国家名称&#34; USA&#34;或者这个结构中的任何名称都带有一个函数,通过只插入一个带有名称的字符串,它输出{1或0} 或者是对还是对(如果类型== bool)。

我的尝试是这个问题中提出的第一个代码。它试图&#34;旅行&#34;结构并找到您使用此调用输入的国家/地区名称标签。

IsNation(string country);其中country可以是任何字符串输入。

问题 如果C#希望我用初始值声明每个变量,我该怎么做这个自定义或我可能做的任何自定义类型?

2 个答案:

答案 0 :(得分:1)

在构造函数public WorkdMarket()中初始化变量。请参阅以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            WorldMarket wm = new WorldMarket();
        }
    }
    public class WorldMarket
    {
        internal List<NationBuilder> Nations { get; set; }
        public WorldMarket()
        {
            Nations = new List<NationBuilder>() {
                new NationBuilder() { 
                    name = "USA", 
                    stockPiles = new List<StockPile>() {
                        new StockPile() { name = "Coal", quantity = 2, value = "value"},
                        new StockPile() { name = "Coal", quantity = 2, value = "value"}
                    }
                }
            };      
        }


        public void AddToWorldMarket(NationBuilder nation)
        {
            Nations.Add(nation);
        }
    }
    public class NationBuilder
    {
        public string name { get; set; }
        public List<StockPile> stockPiles { get; set; }
    }
    public class StockPile
    {
        public string name { get; set; }
        public int quantity { get; set; }
        public string value { get; set; }
    }
}

答案 1 :(得分:1)

您要求的行是:

public class OutputString {

    public String outputHTML(String value ){

        value=value.replace("\\&#39;", "'");
        value=value.replace("\n\n", "\n");

        return value;

    }
}

但是,这将初始化为一个新的WorldMarket对象,该对象尚未预填充值。如果国家是静止的,你可以初始化WorldMarket类中的所有国家

WorldMarket con = new WorldMarket();

或者,如果您可以在WorldMarket中使用isNation方法,那么这可能会更好。

public class WorldMarket 
{
    public WorldMarket() 
    {
         Nations = new List<NationBuilder>() {
            new NationBuilder() { 
                name = "USA",
                ... 
            },
            new NationBuilder() {
                name = "AUS",
                ...
            }
         }
    }
}    

并且主程序中的用法类似于

public class WorldMarket() 
{
    // various class constructor methods


    public int IsNation(string country)
    {
        // you could access Nations directly here
        for (int i = 0; i < Nations.Count; i++)
        {
            if (Nations[i].Name == country)
            {
                return 1;
            }
            // else { return 0; } -- this would exit the loop unnecessarily
        }
        return 0;
    }
}