好,
问题有点简单.
我有一个对象定义为:
public class FullListObject : System.Collections.ArrayList, IPagedCollection
Run Code Online (Sandbox Code Playgroud)
当我尝试:
IPagedCollection pagedCollection = (IPagedCollection)value;
Run Code Online (Sandbox Code Playgroud)
它不起作用... value是一个FullListObject ...这是我的新代码试图解决"is"运算符的问题.当系统测试时,(value is IPagedCollection)它永远不会对FullListObject成真.
如何使用接口类型将对象转换为另一个对象?
编辑:
仅供记录:bugger代码
if (value is IPagedCollection)
{
IPagedCollection pagedCollection = value as IPagedCollection;
Run Code Online (Sandbox Code Playgroud)
if永远不会成真,并且迫使转换也不起作用.所以问题是类的双重定义.现在我在"Commom"项目中为整个系统使用的类定义了FullObjectList.问题消失了!
我已经搜索了SO以寻求帮助,但找不到我的问题的答案。
情况:我需要将“ / NN”子网掩码表示法(认为IPTABLES)转换为0.0.0.0的cisco表示法。
NN是子掩码中从最低八位字节到较高八位字节的数字“ 1”。每个八位位组是8位整数。
可能的解决方案:
制作一个由32个“ 0”组成的数组,并用“ 1”填充最后一个NN数字,然后分组4个八位字节并转换为int ... / 23掩码应类似于0.0.1.255。
我的问题是如何在.NET中执行此操作...我从未使用过二进制操作和转换。
你们能帮我解决这个问题吗?
更新-斯蒂芬回答正确!
这是移植到.NET的代码
if (p.LastIndexOf("/") < 0 ) return p;
int mask= Convert.ToInt32("0"+p.Substring(p.LastIndexOf("/")+1,2));
int zeroBits = 32 - mask; // the number of zero bits
uint result = uint.MaxValue; // all ones
// Shift "cidr" and subtract one to create "cidr" one bits;
// then move them left the number of zero bits.
result &= (uint)((((ulong)0x1 << mascara) - 1) << zeroBits);
result = ~result;
// …Run Code Online (Sandbox Code Playgroud)