【问题标题】:How do I differentiate between Revit Parameter storage types since Revit stores Booleans as integer(1,0)?由于 Revit 将布尔值存储为整数 (1,0),如何区分 Revit 参数存储类型?
【发布时间】:2017-08-02 01:04:43
【问题描述】:

我试图调出一个参数列表(来自两个不同的系列),以协调细微的参数命名差异,并想弄清楚它是什么类型的变量。我尝试了以下代码:

switch (One_Param.StorageType)
{
    case StorageType.Double: { Double_Params.Add(One_Param); break; }
    case StorageType.Integer: { Integer_Params.Add(One_Param); break; }
    case StorageType.String: { String_Params.Add(One_Param); break; }
}

这并没有给我我需要的东西,因为布尔值和线宽一样存储为整数。

正确的代码是:

switch (Bogus_Param.Definition.ParameterType)
{
    case ParameterType.Length: { Correct_Param.Set(Bogus_Param.AsDouble()); break; }
    case ParameterType.Number: { Correct_Param.Set(Bogus_Param.AsDouble()); break; }
    case ParameterType.Integer: { Correct_Param.Set(Bogus_Param.AsInteger()); break; }
    case ParameterType.Text: { Correct_Param.Set(Bogus_Param.AsString()); break; }
    case ParameterType.YesNo: { Correct_Param.Set(Bogus_Param.AsInteger()); break; }
}

请注意,还有其他几个可用的 ParameterType,包括 Volume。这种结构允许访问“实际”存储类型,只要您在 .Set 中提供有效值,就可以很好地工作。所以你仍然为 YesNo 和 Integer ParameterType 提供一个整数。

【问题讨论】:

    标签: c# revit-api


    【解决方案1】:

    仅供参考(通过 Spiderinnet 间接建议):方法是使用 parameter.Definition.ParameterType.ToString(),它将返回“Length”、“Text”、“YesNo”、“Volume”、“Integer”,等等……因为我只求“YesNo”,所以很容易得到布尔参数,但这也可以用来比较其他值。此方法还(很好地)为某些其他参数类型(非空)返回一个字符串“无效”。

    【讨论】:

    • 请注意,即使我一个人回答了我的合法问题,我的问题分数仍然为零。重要的是要知道 StorageType 不如 ParameterType 有价值。这不是给几分吗?而且我只能通过将问题编辑为不再是问题而只是答案来增加问题的分数?这个网站上的评分是神秘而反复无常的。
    • 您无法回答自己的问题并期望获得积分。这会导致一些荒谬的行为。
    • 基本的抱怨是我被无缘无故地降级(因为这是一个合理的问题),但我至少不能回到“1”来寻找答案并提供给其他可能不知道“StorageType”不如“ParameterType”有用的人
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2010-09-22
    • 1970-01-01
    • 2014-04-26
    • 2015-05-05
    相关资源
    最近更新 更多