Skip to content

NullReferenceException when creating one specific binding #6

Description

@jhm-ciberman

I have came up with a strange case that fails with a NullReferenceException:

THIS fails:

// class constructor
this._bindings = new EBinding
{
    () => this.Position == this._vm.PreviewPosition,
};

THIS works:

// class constructor
this._bindings = new EBinding
{
    () => this.Position == this._vm.PreviewPosition + Vector3.Zero,
};

The view class is:

public class BuildModeFurniturePreviewNode : Node3D

The base class Node3D is the one defining the Position property, not the BuildModeFurniturePreviewNode class. I think this is the cause of the error but I am not sure.

This is the stack trace:

Unhandled exception. System.Exception: Error in entry 0 at line #34:
`() => BuildModeFurniturePreviewNode.Position == _vm.PreviewPosition`
 ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at EBind.TriggerDelegate.<>c.<.ctor>b__1_1(Object t, Object h)
   at EBind.ExpressionBinding.Subscribe(IEnumerable`1 triggers, Action action)
   at EBind.EqualityBindings.EqualityBinding`1..ctor(Expression left, Expression right, BindFlag flags, Configuration configuration)
   at EBind.EqualityBindings.EqualityBindingFactory`1.Create(Expression left, Expression right, BindFlag flags, Configuration configuration)
   at EBind.EqualityBindings.EqualityBinding.Create[T](Expression`1 expr, BindFlag flags, Configuration configuration)
   at EBind.ExpressionBinding.Create[T](Expression`1 expr, BindFlag flag, Configuration configuration)
   at EBind.EBinding.Add[T](Expression`1 specification, Int32 sourceLineNumber)
   --- End of inner exception stack trace ---
   at EBind.EBinding.Add[T](Expression`1 specification, Int32 sourceLineNumber)
   at LifeSim.Game.Visuals.BuildMode.BuildModeFurniturePreviewNode..ctor(FurnitureTabViewModel vm) in C:\repos\medieval-life\src\LifeSim.Game\Visuals\BuildMode\BuildModeFurniturePreviewNode.cs:line 32
   at LifeSim.Game.Visuals.BuildMode.FurnitureTabView..ctor(FurnitureTabViewModel vm) in C:\repos\medieval-life\src\LifeSim.Game\Visuals\BuildMode\FurnitureTabView.cs:line 17
   at LifeSim.Game.Visuals.BuildMode.BuildModeView.OnCurrentTabChanged() in C:\repos\medieval-life\src\LifeSim.Game\Visuals\BuildMode\BuildModeView.cs:line 52
   at LifeSim.Game.Visuals.BuildMode.BuildModeView..ctor(BuildModeActivityViewModel vm) in C:\repos\medieval-life\src\LifeSim.Game\Visuals\BuildMode\BuildModeView.cs:line 24
   at LifeSim.Game.GameScene.GetActivityNode(GameActivityViewModel activity) in C:\repos\medieval-life\src\LifeSim.Game\GameScene.cs:line 91
   at EBind.MethodDelegates.FunctionDelegate`3.Invoke(Func`3 del, Object[] parameters)
   at EBind.MethodDelegates.DelegateBase`1.Invoke(Object[] args)
   at EBind.ExpressionInterpreter.<>c__DisplayClass10_0`1.<TryBuildMethodGetter>b__0()
   at EBind.EqualityBindings.EqualityBinding`1.OnSideChanged(Func`1 getter, Action`1 setter)
   at EBind.EqualityBindings.EqualityBinding`1.<.ctor>b__9_0()
   at EBind.TriggerDelegate.<>c__DisplayClass1_1.<.ctor>b__3(Object s, PropertyChangedEventArgs e)
   at LifeSim.ViewModels.GameViewModel.ChangeActivity(GameActivityViewModel activity) in C:\repos\medieval-life\src\LifeSim.ViewModels\GameViewModel.cs:line 93
   at LifeSim.ViewModels.GameViewModel.SwitchGameMode() in C:\repos\medieval-life\src\LifeSim.ViewModels\GameViewModel.cs:line 113
   at LifeSim.ViewModels.GameViewModel.Input_ActionPerformed(Object sender, ActionPerformedEventArgs e) in C:\repos\medieval-life\src\LifeSim.ViewModels\GameViewModel.cs:line 78

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions