Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定第一个simbol是否为_&引用;如果为真,请将其删除并将第一个字母大写?_C#_.net_.net 3.5_Unity3d - Fatal编程技术网

C# 如何确定第一个simbol是否为_&引用;如果为真,请将其删除并将第一个字母大写?

C# 如何确定第一个simbol是否为_&引用;如果为真,请将其删除并将第一个字母大写?,c#,.net,.net-3.5,unity3d,C#,.net,.net 3.5,Unity3d,我们有一个字符串(0..Nsimbols-long)。如何确定它的第一个simbol是否为“\code>”,如果为true,则将其删除并使第一个字母大写(例如“\u distance”=>“” “\”=>“” “_a”=>“a” “\u asd”=>“asd” “asd”=>“asd” (仅适用于扩展名)null=>“”请重试 if (s != null && s.Length >= 2 && s[0] == '_') { s = Char.ToUp

我们有一个字符串(
0..N
simbols-long)。如何确定它的第一个simbol是否为“\code>”,如果为true,则将其删除并使第一个字母大写(例如
“\u distance”
=>

总的来说,当我调查Unity3d
CustomEditor
组件的创建时,我感到很奇怪,我是如此的愚蠢。所以这个想法是——如果类feild以
开头,那么执行解析等


但是看起来,在Unity3d中,对于私有类字段,当您使用类似于
[SerializeField]
的东西标记它时,通常像
\u name
那样编写,inspector将自动执行这样的操作。

非常简单,实际上:

if (s.StartsWith("_")) {
  s = s.Substring(1, 1).ToUpper() + s.Substring(2);
}
实际上,读起来几乎和你的描述一样。如果N小于2,它将失败。但您可以单独检查,例如:

if (s.Length >= 2 && s.StartsWith("_"))
凌乱的一行:

String name = "_distance";
name = (name.StartsWith("_") ? (name.Length > 1 ? name.Substring(1, 1).ToUpper() + (name.Length > 2 ? name.Substring(2) : "") : "") : name);
String name = "_distance";
if (name.StartsWith("_"))
{
    if (name.Length > 1)
    {
        name = name.Substring(1, 1).ToUpper() + (name.Length > 2 ? name.Substring(2) : "");
    }
    else
    {
        name = "";
    }
}
一个班轮的更清晰版本:

String name = "_distance";
name = (name.StartsWith("_") ? (name.Length > 1 ? name.Substring(1, 1).ToUpper() + (name.Length > 2 ? name.Substring(2) : "") : "") : name);
String name = "_distance";
if (name.StartsWith("_"))
{
    if (name.Length > 1)
    {
        name = name.Substring(1, 1).ToUpper() + (name.Length > 2 ? name.Substring(2) : "");
    }
    else
    {
        name = "";
    }
}
扩展版本:

public static String ParseCapitalize(this String str)
{
    if (str == null)
        return "";
    if (str.StartsWith("_"))
    {
        if (str.Length > 1)
        {
            return str.Substring(1, 1).ToUpper() + (str.Length > 2 ? str.Substring(2) : "");
        }
        else
        {
            return "";
        }
    }
    return str;
}

//Usage:
String s = "_this is a string";
if(!String.IsNullOrEmpty(s))
    s = s.ParseCapitalize();
这些代码段将处理:

“”=>“”

“\”=>“”

“_a”=>“a”

“\u asd”=>“asd”

“asd”=>“asd”

(仅适用于扩展名)null=>“”

请重试

if (s != null && s.Length >= 2 && s[0] == '_') {
    s = Char.ToUpper(s[1]) + s.Substring(2);
}
如果您知道
s
不能
null
,请放弃第一个测试

if (s.Length >= 2 && s[0] == '_') {
    s = Char.ToUpper(s[1]) + s.Substring(2);
}

我将使用
s.StartsWith(“”)
作为测试,这样您就不必检查空字符串。@Pluc您应该在扩展方法中检查null以避免潜在的NRE。@Pluc不,您必须检查NRE。扩展方法只是一些静态方法的语法糖,这些静态方法以正常参数作为输入。只需使用
字符串z=null测试代码;z、 ParseCapitalize(),则在扩展方法中抛出NRE,而不是在其调用代码中。编辑:你同时修复了代码:)嘿,我在发表评论后测试了它^^谢谢你提供的信息!