小编xzt*_*xzt的帖子

输入类型的通用方法

我正在尝试编写通用方法来转换类型.我想要写一些Cast.To<Type>(variable)代替的东西(Type) variable.我错误的这个方法版本:

public class Cast
{
    public static T To<T>(object o)
    {
        return (T) o;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的测试:

public class A
{
    public static explicit operator B(A a)
    {
        return new B();
    }
}

public class B
{
}

A a = new A();
B b = Cast.To<B>(a);
Run Code Online (Sandbox Code Playgroud)

正如您所猜测的,此代码将失败InvalidCastException.

此代码是否失败,因为虚拟机不知道如何在运行时object将类型的变量转换为类型B?但是异常消息说:"无法将类型A的对象转换为类型B".所以CLR知道变量的真实类型o,为什么它不能执行转换?

这里有一个主要问题:我应该如何重写方法T To<T>(object o)来解决这个问题?

.net c# generics types casting

21
推荐指数
2
解决办法
1万
查看次数

Gradle - 更改主要发行版 - 删除 bin 和 lib 文件夹

我有一个应用了应用程序插件的 Gradle 构建。应用程序插件还应用分发插件并创建默认main分发,这会将启动脚本放在bin文件夹中,将依赖项放在lib.

现在我想完全删除该默认行为并拥有自己的发行版但名称相同main。更准确地说,我不想要binlib文件夹,而是想要我的自定义内容。

我知道我可以轻松定义一个新的发行版,例如

distributions {
    my {
        // my configuration here
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以通过myDistZip例如产生所需的分布。

但我想准确地更改main分布,以便我能够通过简单distZip(或distTar)生成存档。

我试图删除主要分布(通过distributions.remove(distributions.main))并创建新的

distributions {
    main {
        // my configuration here
    }
}
Run Code Online (Sandbox Code Playgroud)

但这失败了

Cannot add task ':distZip' as a task with that name already exists.
Run Code Online (Sandbox Code Playgroud)

我想这仅仅是因为 GradledistZip为每个新发行版创建任务,所以它也试图为新发行版这样做main,但是distZip在插件应用程序期间已经创建了任务。

那么,有没有办法改变main分配摆脱binlib文件夹?

等级:3.5

java gradle

5
推荐指数
1
解决办法
1219
查看次数

函数似乎在常量空间内工作,但常量空间太多了

我有以下函数,它计算两个字符串之间的差异数:

distance1 :: String -> String -> Int
distance1 list1 list2 = length . filter (uncurry (/=)) $ zip list1 list2
Run Code Online (Sandbox Code Playgroud)

它工作得很好。可以在恒定空间内处理任何大小的列表。

我也在玩 - 比方说 - 这个函数的低级、基于递归、不好的实现,并具有以下内容:

distance2 :: String -> String -> Int
distance2 list1 list2 = distanceHelper 0 0
 where
   distanceHelper index result
     | index == length list1 = result
     | otherwise = distanceHelper (index + 1) (result + diff)
     where
       char1 = list1 !! index
       char2 = list2 !! index
       diff = if char1 /= char2 then …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
85
查看次数

标签 统计

.net ×1

c# ×1

casting ×1

generics ×1

gradle ×1

haskell ×1

java ×1

types ×1