首页 \ 问答 \ 从泛型类(T)获取类的类型(Get type of Class from generic Class(of T))

从泛型类(T)获取类的类型(Get type of Class from generic Class(of T))

我试图得到一个通用的类的类型。 大多数问题都围绕着试图从List(Of T)检索Type T的人。 相反,我想要类本身,即System.Collections.Generic.List

我正在尝试以下代码,但它返回包含泛型参数的Type。 如果我然后尝试使用不同的泛型类型创建类的实例,我会收到错误,因为Type已关闭。

'The type I want to use a a Generic Parameter in a new object
dim O = MasterObject 

'This is the class which is Generic    
dim BaseType as Type = me.getType 

'This is the line that errors, since BaseType already has a Generic Type
dim GenericType as Type=BaseType.MakeGenericType(O.getType())

'This would be the new object, with a new generic type
dim NewObject as Object = Activator.CreateInstance(GenericType,vars)

那么有没有一种方法可以从Type中清除泛型参数,或者某种方式提取没有通用参数的Type?


I am trying to get the Type of a class which is generic. Most questions revolve around people trying to retrieve the Type T from a List(Of T) for example. Instead I want the Type of the class itself, i.e. System.Collections.Generic.List

I am trying the following code, but it returns the Type including the generic parameter. If I then try to create an instance of the class with a different generic Type I get an error because the Type is closed.

'The type I want to use a a Generic Parameter in a new object
dim O = MasterObject 

'This is the class which is Generic    
dim BaseType as Type = me.getType 

'This is the line that errors, since BaseType already has a Generic Type
dim GenericType as Type=BaseType.MakeGenericType(O.getType())

'This would be the new object, with a new generic type
dim NewObject as Object = Activator.CreateInstance(GenericType,vars)

So is there either a way to clear a generic parameter from a Type or some way of extracting the Type without Generic Parameters?


原文:https://stackoverflow.com/questions/35750329
更新时间:2024-01-03 20:01

最满意答案

您需要编译自定义控件的DOM。 为此,您需要将$compile注入控制器,然后在将控件添加到地图后,在控件实例上使用getContainer方法并在其上运行$compile并将其附加到范围:

控制:

L.Control.Custom = L.Control.extend({
    onAdd: function () {
        var container =  L.DomUtil.create('div', 'leaflet-control-custom')
            header = L.DomUtil.create('h1', 'leaflet-control-custom-header', container);

        header.textContent = 'NG-Hide test';
        header.setAttribute('ng-hide', 'hide');

        return container;
    }
});

控制器:

angular.module('app').controller('controller', [
             '$scope', 'leaflet', '$compile',
    function ($scope,   leaflet,   $compile) {
        $scope.hide = false;
        leaflet.map.then(function (map) {
            var control = new L.Control.Custom().addTo(map);
            $compile(control.getContainer())($scope);
        });
    }
]);

这是关于Plunker的一个工作示例: http ://plnkr.co/edit/xzRwTp9OZ8Zp8v7ktt2c?p = preview


You'll need to compile the DOM of your custom control. To do that, you'll need to inject $compile into your controller, then after having added the control to your map use the getContainer method on your control instance and run $compile on it and attach it to the scope:

Control:

L.Control.Custom = L.Control.extend({
    onAdd: function () {
        var container =  L.DomUtil.create('div', 'leaflet-control-custom')
            header = L.DomUtil.create('h1', 'leaflet-control-custom-header', container);

        header.textContent = 'NG-Hide test';
        header.setAttribute('ng-hide', 'hide');

        return container;
    }
});

Controller:

angular.module('app').controller('controller', [
             '$scope', 'leaflet', '$compile',
    function ($scope,   leaflet,   $compile) {
        $scope.hide = false;
        leaflet.map.then(function (map) {
            var control = new L.Control.Custom().addTo(map);
            $compile(control.getContainer())($scope);
        });
    }
]);

Here's a working example on Plunker: http://plnkr.co/edit/xzRwTp9OZ8Zp8v7ktt2c?p=preview

相关问答

更多
  • ngIf ngIf指令根据ngIf 删除或重新创建 DOM树的一部分。 如果分配给ngIf的表达式计算为false值,则该元素将从DOM中删除,否则将将该元素的克隆重新插入到DOM中。
  • ngShow需要一个Angular表达式,因此您不需要双重花括号。 这将为您工作:
    Shows if you have 0-5 doors and windows combined.
    Shows if you have 6-10 doors and windows combined. ...
  • ng-hide和ng-show的等价类是.ng-hide-add和.ng-hide-remove 。 此外,您可以使用.ng-hide-add-active和.ng-hide-remove-active来设置样式,并根据需要单独控制这些状态。 根据Angularjs关于ngHide和ngShow的文档,您可以在活动状态下使用相同的类来设置动画,以使用它的相应事件(添加或删除)生成动画。 以下示例使用此功能实现简单的fade-in fade-out按钮。 观察确保在索引页面中包含angular-animate ...
  • foo.bar引用不应该包含大括号:

    I could be shown, or I could be hidden

    I could be shown, or I could be hidden

    角度表达式需要在卷曲括号中,其中Angular 指令不是。 参见了解角度模板 。 The foo.bar reference should not contain the braces:

    取决于你的用例,但是总结出不同点: ng-if将从DOM中删除元素。 这意味着所有的处理程序或其他附加到这些元素的东西都将丢失。 例如,如果您将点击处理程序绑定到其中一个子元素,那么当ng-if评估为false时,该元素将从DOM中删除,并且您的点击处理程序将不再工作,即使在ng-if后ng-if以后评估为true,显示元素。 您将需要重新附加处理程序。 ng-show/ng-hide不会从DOM中删除元素。 它使用CSS样式来隐藏/显示元素(注意:您可能需要添加自己的类)。 这样,你附属于孩子的处理者就不 ...
  • 您需要编译自定义控件的DOM。 为此,您需要将$compile注入控制器,然后在将控件添加到地图后,在控件实例上使用getContainer方法并在其上运行$compile并将其附加到范围: 控制: L.Control.Custom = L.Control.extend({ onAdd: function () { var container = L.DomUtil.create('div', 'leaflet-control-custom') header ...
  • 您正在使用ng-hide和ng-show访问$ scope模型。 在您的服务中,您将isAuthenticated设置为false,并且从不将其设置为True。 所以你的应用程序停留在你的第一个状态,其中isAuthenticated是错误的。 I completly forgot to add 'res' in my register controller, that's why it wasn't updated : $http.post(url, user) .success( ...
  • 你可以使用ng-required ,它会设置必要的属性与你的输入模型的checked boleon的对应关系 you can use ng-required and it will set the required att ...
  • $stateParams params总是字符串。 “true”== true,还有“false”== true。 你需要以某种方式将值强制转换为布尔值。 尝试这个 : $scope.asesor = !!$stateParams.asesor; $stateParams params are always strings. "true" == true, but also "false" == true. You need to coerce the value to boolean somehow. ...
  • 您可以在父列表中进行过滤,如下所示: angular.module('ExampleApp', []) .controller('ExampleController', function() { this.list = [{ id: 1, labels: [{ id: 11 }, { id: 12 }] }, { id: 2, labels: [{ ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)