-
-
Notifications
You must be signed in to change notification settings - Fork 21.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
C# Array<String> Export Support Enum(String) #51835
Conversation
Do we support enum strings at all in C#? Does this work already?: [Export(PropertyHint.Enum, "A,B,C")]
string field; If it does work, then I understand making it work for arrays as well. |
Yes already supported. 是,已经支持了. |
modules/mono/csharp_script.cpp
Outdated
MonoObject *attr = p_member->get_attribute(CACHED_CLASS(ExportAttribute)); | ||
if (PropertyHint(CACHED_FIELD(ExportAttribute, hint)->get_int_value(attr)) == PROPERTY_HINT_ENUM) { | ||
r_hint_string = itos(elem_variant_type) + "/" + itos(PROPERTY_HINT_ENUM) + ":" + CACHED_FIELD(ExportAttribute, hintString)->get_string_value(attr); | ||
} else { | ||
// Format: type/hint:hint_string | ||
r_hint_string = itos(elem_variant_type) + "/" + itos(elem_hint) + ":" + elem_hint_string; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you make it check that the element type is indeed String? Something like this:
MonoObject *attr = p_member->get_attribute(CACHED_CLASS(ExportAttribute)); | |
if (PropertyHint(CACHED_FIELD(ExportAttribute, hint)->get_int_value(attr)) == PROPERTY_HINT_ENUM) { | |
r_hint_string = itos(elem_variant_type) + "/" + itos(PROPERTY_HINT_ENUM) + ":" + CACHED_FIELD(ExportAttribute, hintString)->get_string_value(attr); | |
} else { | |
// Format: type/hint:hint_string | |
r_hint_string = itos(elem_variant_type) + "/" + itos(elem_hint) + ":" + elem_hint_string; | |
} | |
bool preset_hint = false; | |
if (elem_variant_type == Variant::STRING) { | |
MonoObject *attr = p_member->get_attribute(CACHED_CLASS(ExportAttribute)); | |
if (PropertyHint(CACHED_FIELD(ExportAttribute, hint)->get_int_value(attr)) == PROPERTY_HINT_ENUM) { | |
r_hint_string = itos(elem_variant_type) + "/" + itos(PROPERTY_HINT_ENUM) + ":" + CACHED_FIELD(ExportAttribute, hintString)->get_string_value(attr); | |
preset_hint = true; | |
} | |
} | |
if (!preset_hint) { | |
// Format: type/hint:hint_string | |
r_hint_string = itos(elem_variant_type) + "/" + itos(elem_hint) + ":" + elem_hint_string; | |
} |
This way we also make sure not to do extra work if not needed. Additionally we could also avoid the _try_get_member_export_hint
call right above this if not needed:
PropertyHint elem_hint = PROPERTY_HINT_NONE;
String elem_hint_string;
ERR_FAIL_COND_V_MSG(elem_variant_type == Variant::NIL, -1, "Unknown array element type.");
bool preset_hint = false;
if (elem_variant_type == Variant::STRING) {
MonoObject *attr = p_member->get_attribute(CACHED_CLASS(ExportAttribute));
if (PropertyHint(CACHED_FIELD(ExportAttribute, hint)->get_int_value(attr)) == PROPERTY_HINT_ENUM) {
r_hint_string = itos(elem_variant_type) + "/" + itos(PROPERTY_HINT_ENUM) + ":" + CACHED_FIELD(ExportAttribute, hintString)->get_string_value(attr);
preset_hint = true;
}
}
if (!preset_hint) {
int hint_res = _try_get_member_export_hint(p_member, elem_type, elem_variant_type, /* allow_generics: */ false, elem_hint, elem_hint_string);
ERR_FAIL_COND_V_MSG(hint_res == -1, -1, "Error while trying to determine information about the array element type.");
// Format: type/hint:hint_string
r_hint_string = itos(elem_variant_type) + "/" + itos(elem_hint) + ":" + elem_hint_string;
}
r_hint = PROPERTY_HINT_TYPE_STRING;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've changed it, just according to you.
Thanks! |
After searching for a long time and not finding anything relevant, I modified it myself.
So far I have tested it without problems. Testing in 3.x
搜索很久没找到相关的, 我就自己修改了一下.
目前测试下来没有遇到问题. 测试于3.x