Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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#_C#_String_Namespaces - Fatal编程技术网

如何将名称空间检索到字符串C#

如何将名称空间检索到字符串C#,c#,string,namespaces,C#,String,Namespaces,我正在编写一个需要程序名称空间的程序,但我似乎不知道如何检索它。我希望最终结果是一个字符串 我能够找到一个关于这个主题的MSDN页面,但它证明对我自己没有帮助。 任何帮助都将不胜感激。这个程序是用C语言编写的 编辑:对不起,伙计们,这不是一个控制台应用程序。这应该可以: var myType = typeof(MyClass); var n = myType.Namespace; 向控制台写出: Type myType = typeof(MyClass); Console.WriteLine

我正在编写一个需要程序名称空间的程序,但我似乎不知道如何检索它。我希望最终结果是一个字符串

我能够找到一个关于这个主题的MSDN页面,但它证明对我自己没有帮助。

任何帮助都将不胜感激。这个程序是用C语言编写的

编辑:对不起,伙计们,这不是一个控制台应用程序。

这应该可以:

var myType = typeof(MyClass);
var n = myType.Namespace;
向控制台写出:

Type myType = typeof(MyClass);
Console.WriteLine("Namespace: {0}.", myType.Namespace);
设置WinForm标签:

Type myType = typeof(MyClass);
namespaceLabel.Text = myType.Namespace;
或者在相关类中创建一个方法并在任何地方使用:

public string GetThisNamespace()
{
   return GetType().Namespace;
}
您可以简单地使用并通过课程(即程序):

将打印:

ConsoleApplication1

把这个放到你的组件上:

public static string GetCurrentNamespace()
{
    return System.Reflection.Assembly.GetExecutingAssembly().EntryPoint.DeclaringType.Namespace;
}
或者,如果希望此方法位于程序使用的库中,请按如下方式编写:

[System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.NoInlining)]
public static string GetCurrentNamespace()
{
    return System.Reflection.Assembly.GetCallingAssembly().EntryPoint.DeclaringType.Namespace;
}

如果在命名空间
B
中有类
A
x
项,则可以使用:

string s = x.GetType().Namespace;
s
包含“B”

您还可以使用
x.GetType().Name
获取类型名称,或者使用
x.GetType().FullName
获取两者

Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
Console.WriteLine("Namespace: {0}.", myType.Namespace);
基于Joe的评论,您仍然可以使用

Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
var namespaceName = myType.Namespace.ToString();
使用
namespaceName
作为变量以字符串值的形式访问名称空间名称。

这不会出错:

MethodBase.GetCurrentMethod().DeclaringType.Namespace

添加到所有答案中

从C#6.0开始,就有了关键字的名称

string name = nameof(MyNamespace);
这有几个优点:

  • 该名称在编译时解析
  • 重构命名空间时,名称将更改
  • 它是经过语法检查的,因此名称必须存在
  • 清洁代码
  • 注意:这并没有给出完整的名称空间。在这种情况下,
    name
    将等于
    Bar

    namespace Foo.Bar
    {
       string name = nameof(Foo.Bar);
    }
    

    如果您是从需要捕获的命名空间中的类执行它,则可以使用:

    GetType().Namespace


    这很好地工作,因为它允许您重构名称空间,并且仍然可以工作。

    作为一个滚动upp,所有帖子答案: 从以字符串tableName形式给定的表中获取所有列的值:

    var tableName = "INVENTORY_PRICE"; var assembly = Assembly.GetExecutingAssembly(); var tip = typeof(Form3); var t = assembly.GetType(tip.Namespace + "." + tableName); if (t != null) { var foos = db.GetTable(t); foreach (var f in foos) { Console.WriteLine(f + ":"); foreach (var property in f.GetType().GetProperties()) if (property != null) { var pv = property.GetValue(f, null); Console.WriteLine(" " + property.Name + ":" + pv); } Console.WriteLine("------------------------------------------------"); } } var tableName=“存货价格”; var assembly=assembly.getExecutionGassembly(); var tip=类型(格式3); var t=assembly.GetType(tip.Namespace+“+tableName); 如果(t!=null) { var foos=db.GetTable(t); foreach(foos中的var f) { Console.WriteLine(f+“:”); foreach(f.GetType().GetProperties()中的var属性) if(属性!=null) { var pv=property.GetValue(f,null); Console.WriteLine(“+property.Name+”:“+pv”); } Console.WriteLine(“------------------------------------------------------------”); } }
    如果我们使用ado,这很容易,这个示例使用LINQ上下文…

    不幸的是,它不是一个控制台应用程序,所以行中{0}的重要性是:console.WriteLine(“Namespace:{0}.”,myType.Namespace);我不知道。好吧,这是什么类型的应用程序?WriteLine不是她最重要的部分。使用
    string.Format()
    继续。这是一个windows窗体应用程序。@ElliotAmes
    myType.Namespace
    在这种情况下是一个字符串。我不清楚您的问题。为什么不在需要的地方编写程序的名称空间呢?这是一个很有道理的问题。在程序中用字符串硬编码名称空间会导致灾难-迟早有人会更改名称空间,忘记或不知道名称空间也在程序中编码,然后失败。用例:程序集中的嵌入式资源的路径前缀为名称空间。下面的答案给出了一种查找前缀的强类型方法。这比公认的答案和此处发布的其他变体要好多少?这一行可以在应用程序中的任何方法中逐字使用。被接受的答案是围绕着(MyClass)的类型而写的。因此,对于真正的复制/粘贴友好型代码来说,这是成功的(虽然在运行时可能会慢一点)。就目前的情况来看,这个答案是误导性的,因为它只适用于单段名称空间。@ThePadeMella,从技术上讲是这样的。如果您想要包含您引用的名称空间的名称,可以执行类似于
    $“{nameof(ns1)}.{nameof(ns2)}”
    var tableName = "INVENTORY_PRICE"; var assembly = Assembly.GetExecutingAssembly(); var tip = typeof(Form3); var t = assembly.GetType(tip.Namespace + "." + tableName); if (t != null) { var foos = db.GetTable(t); foreach (var f in foos) { Console.WriteLine(f + ":"); foreach (var property in f.GetType().GetProperties()) if (property != null) { var pv = property.GetValue(f, null); Console.WriteLine(" " + property.Name + ":" + pv); } Console.WriteLine("------------------------------------------------"); } }