RevitAPI: FamilyManager.Set - InvalidOperationException: There is no current type

本文详细介绍了在Revit环境中处理无默认类型的参数设置问题,通过实例展示了如何检查并创建默认类型,进而成功设置参数值。文章提供了实用的代码示例,帮助解决在家庭管理器中遇到的异常问题。

在Family中调用Set(FamilyParameter)的时候,会抛出异常InvalidOperationException: There is no current type,例如下面的代码:

var para = RevitDoc.FamilyManager.AddParameter("Length", BuiltInParameterGroup.INVALID, ParameterType.Length, false);
RevitDoc.FamilyManager.Set(para, 123.1);
在没有默认类型的时候,我们是依然可以调用AddParameter的。

但是却不能设置参数的值,因为没有类型的话,参数的值就没有意义嘛。

所以,这里我们需要创建一个新的,然后再设置Parameter。在此之前,可以使用FamilyManager.CurrentType是否为空来判断有没有默认的类型。

if (familyMgr.CurrentType == null)
    familyMgr.NewType("A new type");
var para = familyMgr.AddParameter("Length", BuiltInParameterGroup.INVALID, ParameterType.Length, false);
RevitDoc.FamilyManager.Set(para, 123.1);


给定的参考引用中未提及解决“Operation is not valid due to the current state of the object”(涉及Microsoft.Mashup.Evaluator.Interface.ErrorException和System.InvalidOperationException)错误的方法,以下是一些通用的解决思路: ### 检查对象状态 该错误通常表示对象处于不适合执行当前操作的状态。需要检查代码中操作对象之前的逻辑,确保对象已正确初始化、未被释放或处于可操作状态。 ```csharp // 示例代码,检查对象是否为 null if (myObject != null) { // 执行操作 myObject.DoSomething(); } else { // 处理对象为 null 的情况 Console.WriteLine("对象未正确初始化。"); } ``` ### 调试和日志记录 在关键代码位置添加调试信息和日志记录,输出对象的状态和相关变量的值,帮助定位问题。 ```csharp // 示例代码,记录对象状态 Console.WriteLine($"对象状态: {myObject.State}"); try { // 执行操作 myObject.DoSomething(); } catch (InvalidOperationException ex) { // 记录异常信息 Console.WriteLine($"操作无效: {ex.Message}"); } ``` ### 检查依赖项 确保对象依赖的其他组件或服务正常工作。例如,如果对象依赖于数据库连接,检查数据库是否可用、连接是否正确打开。 ```csharp // 示例代码,检查数据库连接 if (dbConnection.State == ConnectionState.Open) { // 执行数据库操作 using (var command = new SqlCommand("SELECT * FROM Table", dbConnection)) { // 执行查询 using (var reader = command.ExecuteReader()) { // 处理结果 } } } else { // 处理连接未打开的情况 Console.WriteLine("数据库连接未打开。"); } ``` ### 更新相关组件 有时该错误可能是由于使用的组件版本过旧或存在 bug 导致的。尝试更新相关的 NuGet 包、库或软件版本。 ### 查看官方文档和社区论坛 在 Microsoft 官方文档、技术论坛(如 Stack Overflow)上搜索该错误信息,可能会找到其他开发者遇到的类似问题及解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值