【问题标题】:ArgumentException in Tablets.Count methodTablets.Count 方法中的 ArgumentException
【发布时间】:2018-02-17 13:29:34
【问题描述】:

系统地,但仅在一台 PC 上,同时执行此代码:

using Microsoft.Ink;

...

Tablets allTablets = new Tablets();
int numTablet = allTablets.Count;

我得到了这个异常。

System.ArgumentException:Valore non compreso nell'intervallo previsto。 {英文 --> 值不在正确范围内}
在 Microsoft.Ink.InkTabletsClass.get_Count()
在 Microsoft.Ink.Tablets.get_Count()

一个 COUNT 怎么会抛出这种异常? 这是否意味着 Count 方法返回的值不是 int ? 谢谢。

【问题讨论】:

  • 这就是你所有的代码吗?
  • 我使用 ILSpy 来检查代码。该属性返回具有我们无法访问的内部实现的 COM 对象的值。 COM 接口是Microsoft.Ink.IInkTablets,调用的 COM 方法的调度 ID 为 2。我不知道这意味着什么。
  • 啊哈,找到了。它调用这个:msdn.microsoft.com/en-us/library/ms821593.aspx
  • 我也尝试使用 ILSpy 来检查该类,但没有成功。

标签: c# exception tablet


【解决方案1】:

一个 COUNT 怎么会抛出这种异常?

因为在Tablets 类的Count 属性的getter 中实现了一些逻辑。异常是在 getter 中引发的。

是不是意味着Count方法返回的值不是int?

没有。 int 属性只能返回 int 值或引发异常。它永远不能返回任何其他类型的值。编译器强制执行此操作。

【讨论】:

  • 感谢您的解释。
【解决方案2】:

我试过你的代码,它对我有用。话虽如此,我之前已经多次遇到类似的异常,所以我现在养成了先检查空对象的习惯。所以,我会使用:

Tablets allTablets = new Tablets();
int numTablet = 0;
if (allTablets != null)
    numTablet = allTablets.Count;

为了回答您的问题,出于某种原因,new Tablets() 返回 null 而不是空的 ICollection

【讨论】:

  • 那将是 NullReferenceException 而不是 ArgumentException
  • 好点@KlitosKyriacou。但是处理 null 平板电脑应该可以解决这个问题。
  • 我确实认为 allTablets!=null 并不能避免错误,但我还是会说出来。
  • 我可以假设如果 allTablets.Count 抛出 ArgumentException 这意味着没有平板设备连接到 pc 并且像它这样的威胁会给我一个 Count=0 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2012-11-03
  • 2019-03-16
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多