새로운 클래스 C#을 인스턴스화 할 수 없습니다 나는 클래스 AllStats는 다음과 같이 구현 재산 public AllStats BaseStats { get; set; }
와 클래스를 가지고 내가하려고 할 때, 그러나내가 일치의 최신 버전을 사용하고
public class AllStats : IEnumerable<Stats>
{
private MagicPower magicPower;
public MagicPower MagicPower
{
get { return magicPower; }
set
{
magicPower = value;
Add("Magic Power", magicPower);
}
}
private DebuffDuration debuffDuration;
public DebuffDuration DebuffDuration
{
get { return debuffDuration; }
set
{
debuffDuration = value;
Add("Debuff Duration", debuffDuration);
}
}
private Defense defense;
public Defense Defense
{
get { return defense; }
set
{
defense = value;
Add("Defense", defense);
}
}
private MagicDefense magicDefense;
public MagicDefense MagicDefense
{
get { return magicDefense; }
set
{
magicDefense = value;
Add("Magic Defense", magicDefense);
}
}
private CriticalPower criticalPower;
public CriticalPower CriticalPower
{
get { return criticalPower; }
set
{
criticalPower = value;
Add("Critical Power", criticalPower);
}
}
private CriticalChance criticalChance;
public CriticalChance CriticalChance
{
get { return criticalChance; }
set
{
criticalChance = value;
Add("Critical Chance", criticalChance);
}
}
private Multistrike multistrike;
public Multistrike Multistrike
{
get { return multistrike; }
set
{
multistrike = value;
Add("Multistrike", multistrike);
}
}
private CooldownReduction cooldownReduction;
public CooldownReduction CooldownReduction
{
get { return cooldownReduction; }
set
{
cooldownReduction = value;
Add("Cooldown Reduction", cooldownReduction);
}
}
private Evasion evasion;
public Evasion Evasion
{
get { return evasion; }
set
{
evasion = value;
Add("Evasion", evasion);
}
}
private Resistance resistance;
public Resistance Resistance
{
get { return resistance; }
set
{
resistance = value;
Add("Resistance", resistance);
}
}
private readonly Dictionary<string, Stats> _items = new Dictionary<string, Stats>();
public void Add(string element, Stats config)
{
_items[element] = config;
}
public Stats this[string element]
{
get { return _items.ContainsKey(element) ? _items[element] : null; }
set { _items[element] = value; }
}
public IEnumerator<Stats> GetEnumerator()
{
return _items.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _items.Values.GetEnumerator();
}
}
다음과 같이이 클래스의 새 인스턴스를 만듭니다.
BaseStats = new AllStats()
{
MagicPower = new MagicPower(Level.CurrentLevel),
DebuffDuration = new DebuffDuration(Level.CurrentLevel),
Defense = new Defense(Level.CurrentLevel),
MagicDefense = new MagicDefense(Level.CurrentLevel),
CriticalPower = new CriticalPower(1),
CriticalChance = new CriticalChance(1),
Multistrike = new Multistrike(1),
CooldownReduction = new CooldownReduction(1),
Evasion = new Evasion(1),
Resistance = new Resistance(1)
};
null 참조 예외가 발생합니다. 왜 그런가요? 이것은 일반적인 비주얼 스튜디오에서 사용되었지만 이전 버전의 유니티가 문제를 일으키는 것처럼 보입니다. 이 문제를 어떻게 해결할 수 있습니까? 여기
는Stats
클래스입니다 : 당신은 당신이 업데이트 된 통계를 포함 통지의 작은 창을 얻을 레벨 업을 할 때마다
public enum StatsOrders
{
MagicPower,
DebuffDuration,
Defense,
MagicDefense,
CriticalPower,
CriticalChance,
Multistrike,
CooldownReduction,
Evasion,
Resistance
}
public abstract class Stats : IStats
{
public double PointsInStats { get; set; }
public bool IsSuccessfulHit(double baseStats)
{
return Increase(baseStats)*10 >= new RngCrypto().Next(1, 1001);
}
public double Increase(double baseInput)
{
return CalculateIncreament(baseInput, PointsInStats);
}
protected abstract double percentageIncrease { get; set; }
protected Stats(double pointsInStats)
{
PointsInStats = pointsInStats;
}
protected double CalculateIncreament(double baseInput, double pointsInStats)
{
string a = (baseInput * (pointsInStats/percentageIncrease)).ToString("N1");
return double.Parse(a);
}
}
열거 형을 사용하고이 열거는 순서대로 유지하는 데 도움이됩니다.
또한 IStats
인터페이스 :
public interface IStats
{
double PointsInStats { get; set; }
bool IsSuccessfulHit(double baseStats);
double Increase(double input);
}
어디에서 _items를 초기화 했습니까? 그 이유는 그것 때문에 null 참조 예외를 줄 수 있습니다 –
@ Mysterio11 필드 이니셜 라이저 –
예외 stacktrace 무엇입니까? 무슨 선이 던지고 있니? 그게 우리가 (그리고 당신이) 알아야 할 것입니다. AllStats가 IEnumerable 양식을 상속 받기 때문에 예외가 모두 –