为什么我的编译器在将const default添加到构造函数参数后才识别某些方法?

时间:2015-08-08 14:27:44

标签: c# unity3d compiler-errors

我正在使用Unity c#中的一个项目,我得到一个错误,我不明白他为什么这么说。

enter image description here

这些错误指向我在以下文件中调用SaveDictionary()和LoadDictionary()方法的地方:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class BinaryDictionary<T>
{

  public BinaryDictionary(string name, string path = FileReadWrite.binPath)
  {
    fileName = name;
    this.path = path;
  }

  protected Dictionary<string, T> dict;
  protected string fileName;
  protected string path;

  protected virtual void LoadDictionary()
  {
    if (dict == null)
    {
      try
      {
        dict = FileReadWrite.GetBinaryFile<Dictionary<string, T>>(fileName, path);
      }
      catch (System.IO.FileNotFoundException e)
      {
        Debug.LogWarning(fileName + " not found, making new Dictionary.");
        dict = new Dictionary<string, T>();
      }
    }
  }

  public virtual void SaveDictionary()
  {
    if (dict != null)
    {
      FileReadWrite.SaveBinaryFile(fileName,  path, dict);
    }
  }

  public T GetElement(string key)
  {
    LoadDictionary();

    T toReturn = dict.ContainsKey(key) ? dict[key] : default(T);

    return toReturn;
  }

  public void AddElement(string key, T value)
  {

    LoadDictionary();

    if (!dict.ContainsKey(key))
    {
      dict.Add(key, value);
    }
    else
    {
      dict[key] = value;
    }

    SaveDictionary();
  }

  public void RemoveElement(string key)
  {
    LoadDictionary();
    if (dict.ContainsKey(key))
    {
      dict.Remove(key);
      SaveDictionary();
    }
  }

  public Dictionary<string, T>.KeyCollection GetKeys()
  {
    LoadDictionary();
    return new Dictionary<string, T>(dict).Keys;
  }
  public Dictionary<string, T> GetDictionary()
  {
    LoadDictionary();
    return new Dictionary<string, T>(dict);
  }
}

起初这些错误并没有显示出来。当我为参数&#34; path&#34;添加默认值FileReadWrite.binPath时出现了它们。在构造函数中。

我将FileReadWrite.binPath声明如下:

public const string binPath = "Other/Bin/";

当我再次删除默认值时(在构造函数中),这些错误消失了。

有人知道我做错了什么,或者他为什么在这种情况下说错误?

1 个答案:

答案 0 :(得分:0)

您可以尝试不使用FileReadWrite.binPath作为构造函数的默认参数。试试这个:

public BinaryDictionary(string name, string path = null)
{
    fileName = name;
    if(path == null)
    {
         this.path = FileReadWrite.binPath;   
    }

}

我不知道确切的问题,但我猜你的虚拟方法会导致与你的构造器发生冲突。 (虽然不确定,但这只是猜测)