gpt4 book ai didi

c# - 有没有办法使用扩展方法在 C# 中实现以下实现?

转载 作者:行者123 更新时间:2023-12-03 20:50:26 24 4
gpt4 key购买 nike

我有一个方法可以执行如下所示的操作:

// check if bits 6,7,8 are zero
if ((num >> 5) != 0)
{
//do some thing
return false;
}

// check if bits 2 ,3,4 are zero
if ((num & 0x0E) != 0)
{
//do something
return false;
}

// check if bit 1 is 1
if ((num & 1) != 1)
{
//dosomething
return false;
}

现在我想添加如下扩展方法:

   num
.arebitsset((6,7,8) ,(do some action and return from method if false , if true allow chaining))
.arebitsset(2,3,4) , <same as above>)
.......

虽然我知道位集检查的逻辑,但我需要知道如何从方法返回或允许基于真/假结果的链接。

用func可以吗?我不确定。

注意:我下面有80个这样的条件要测试,所以写80个if条件好不好,当然不行,所以我需要一些紧凑的形式

最佳答案

你可以这样写扩展方法:

public static class BitSetExtensions
{
private static bool AreBitsSet(int i, int[] bits)
{
// you already have this
}

public static (int value, bool valid) CallActionIfBitsSet(this int value, int[] bits, Action action)
{
return CallActionIfBitsSet((value, true), bits, action);
}

public static (int value, bool valid) CallActionIfBitsSet(this (int value, bool valid) data, int[] bits, Action action)
{
if (data.valid)
{
data.valid = AreBitsSet(data.value, bits);

if (data.valid) action();
}

return data;
}
}

然后你可以像这样链接它们:

int num = 5;

num.CallActionIfBitsSet(new[] {1, 3, 5}, () =>
{
/* action */
})
.CallActionIfBitsSet(new[] {2, 3, 4}, () =>
{
/* other action */
})
.CallActionIfBitsSet(new[] {2, 3, 6}, () =>
{
/* other action */
});

我个人不是很喜欢,因为我认为与传统的 if 相比,您的界面不会更容易,但它会起作用。

关于c# - 有没有办法使用扩展方法在 C# 中实现以下实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59616139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com