Gunnar Peipman's ASP.NET blog

ASP.NET, C#, SharePoint, SQL Server and general software development topics.

Sponsors

News

 
 
 
 
 
DZone MVB

Links

Social

January 2008 - Posts

C# and question marks

One cool operators that C# offers us is ?? But before ?? we should know what does ? after variable type name. So, let's take both of these question marks and let's see what they are. Also let's jump for a while behind compilator to see IL code that compiler produces.

Let's start with single question mark. Single quetsion mark after variable type tells to compilator that this variable is Nullable<T>. To see if my statement holds true let's look at the following code.


class Program
{
    static void Main(string[] args)
    {
        Int32? x;
        Nullable<Int32> y;
    }
}

There are two lines of code in method Main(). First of them declares Int32 type variable using question mark. Second line declares Nullable<Int32>. Let's see how these lines look like after compiling the code.


method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       2 (0x2)
  .maxstack  0
  .locals init ([0] valuetype [mscorlib]System.Nullable`1<Int32> x,
           [1] valuetype [mscorlib]System.Nullable`1<Int32> y)
  IL_0000:  nop
  IL_0001:  ret
} // end of method Program::Main

As we can see, both of them will be Nullable<Int32> after compiling.

Now let's deal with double question mark that is operator. We will use code given in previous example and we will extend it so variable x is null and variable y has value 15. This time we need also some output, so I added two lines to deal with console. The code is here.


class Program
{
    static void Main(string[] args)
    {
        Int32? x = null;
        Nullable<Int32> y = 15;
        Console.WriteLine(x ?? y);
        Console.ReadLine();
    }
}

When we run this code we will get 15 as output on console window. Therefore we can say that operator ?? works as COALESCE function in SQL Server. COALESCE returns first non-null value from it's argument list. Let's look at the following SQL statement.


SELECT COALESCE(null, notes, description) FROM contacts WHERE contact_id=10

It returns value of field notes if notes is not null and value of description otherwise. It returns null only if description and notes are both nulls. Can we use something like this also using ?? operator? Of course, no problem. Run the following code.


class Program
{
    static void Main(string[] args)
    {
        Int32? x = null;
        Nullable<Int32> y = null;
        Console.WriteLine(x ?? y ?? 10);
        Console.ReadLine();
    }
}

After running the code we will see value 10 written on console window.

One thing we can't do is using different types around ?? operator. By example, the following code


class Program
{
    static void Main(string[] args)
    {
        Int32? x = null;
        string y = "test";
        Console.WriteLine(x ?? y);
        Console.ReadLine();
    }
}

produces the following error: Operator '??' cannot be applied to operands of type 'int?' and 'string'.

SharePoint: How to display blog feed using XML Web Part?

I wanted to show our company's blog feed on our intranet first page. There some empty space I wanted to fill somehow. I found a good solution, so there was no need for some third-party Web Parts. Also there was no need to write any additional code.

Here's my blog feed example as easy step-by-step guide.

  1. SharePoint: XML Web Part settingsMove to SharePoint page you want to add your blog feed.
     
  2. Open this page in edit view and add new Web Part called XML Web Part.
     
  3. If Web Part is added to page then open it's settings window.
     
  4. On the field XML Link insert your blog feed URL. Check out if link is correct and content is receivable by clicking the link titled as Test Link.
     
  5. Push button titled as [XSL Editor].
     
  6. XSL editing window is opened and now insert XSL code given below. When inserted click [OK].
     
  7. If everything is okay then you should see your blog's last titles as bulleted list.
     
  8. If you see your blog entries in bulleted list then it is okay to save edited page.
     
     

XSL you need is here. Take it using copy and paste.


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="xsl">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="/">
        <div>
           <xsl:apply-templates select="rss/channel"/>
        </div>
    </xsl:template>
    <xsl:template match="rss/channel">
        <xsl:variable name="link" select="link"/>
        <xsl:variable name="description" select="description"/>

        <ul><xsl:apply-templates select="item"/></ul>
    </xsl:template>
    <xsl:template match="item">
        <xsl:variable name="item_link" select="link"/>
        <xsl:variable name="item_title" select="description"/>
        <li>
            <a href="{$item_link}" title="{$item_title}"><xsl:value-of select="title"/></a>
        </li>
    </xsl:template>
</xsl:stylesheet>

The result I got in my company's intranet is here.

Posted: Jan 02 2008, 06:09 PM by DigiMortal | with 60 comment(s)
Filed under:
More Posts